我通过将zoneinfo文件复制到/etc/localtime将Linux机器上的时区设置为GMT + 6,但是date命令仍将时间显示为UTCtime-6。任何人都可以向我解释这种行为吗?

我假设date命令应显示UTCtime+6时间。这是我要执行的步骤:

date
Wed Jan 22 17:29:01 IST 2014

date -u
Wed Jan 22 11:59:01 UTC 2014

cp /usr/share/zoneinfo/Etc/GMT+6 /etc/localtime

date
Wed Jan 22 05:59:21 GMT+6 2014

date -u
Wed Jan 22 11:59:01 UTC 2014


评论

是否设置了TZ环境变量(回显$ TZ不会产生空行)?另外,最好是创建到/ etc / localtime的符号链接,而不是复制实际文件(这样可以确保安全,以防zoneinfo数据发生变化,而这很可能永远不会发生)是一个更好的主意。

什么是发行版?不同的发行版对此有不同的处理方式!

@slm:我正在使用ubuntu 12.04

您可能不知道此政策,但是您不希望在不同的SE网站上交叉发布相同的Q。 stackoverflow.com/questions/21282367/timezone-setting-in-linux

“这个问题已经发布在多个站点上了”呵呵,对我来说这是一个新问题。从来没有遇到过类似的SE网站。无论如何,这是Google搜索如何更改Linux时区时出现的第一个问题,它是我所见过的最受好评的问题,因此也许应该重新打开它? />

#1 楼

看一下标题为:如何:在Linux中更改TimeZone的2种方法的博客文章。

Red Hat发行版

如果您使用的是Red Hat之类的发行版那么您复制文件的方法几乎是可以接受的。

注意:如果您正在寻找与发行版无关的解决方案,那么它在Debian上也适用,尽管下面有一些更简单的方法,如果您只需要与Debian机器有关。

$ ls /usr/share/zoneinfo/
Africa/      CET          Etc/         Hongkong     Kwajalein    Pacific/     ROK          zone.tab
America/     Chile/       Europe/      HST          Libya        Poland       Singapore    Zulu
Antarctica/  CST6CDT      GB           Iceland      MET          Portugal     Turkey       
Arctic/      Cuba         GB-Eire      Indian/      Mexico/      posix/       UCT          
Asia/        EET          GMT          Iran         MST          posixrules   Universal    
Atlantic/    Egypt        GMT0         iso3166.tab  MST7MDT      PRC          US/          
Australia/   Eire         GMT-0        Israel       Navajo       PST8PDT      UTC          
Brazil/      EST          GMT+0        Jamaica      NZ           right/       WET          
Canada/      EST5EDT      Greenwich    Japan        NZ-CHAT      ROC          W-SU         


我建议链接到它而不是复制。

$ sudo unlink /etc/localtime 
$ sudo ln -s /usr/share/zoneinfo/Etc/GMT+6 /etc/localtime


现在的日期显示了不同的时区:

$ date -u
Thu Jan 23 05:40:31 UTC 2014

$ date 
Wed Jan 22 23:40:38 GMT+6 2014


Ubuntu / Debian Distros

要更改这两个发行版中的时区,您可以使用该命令:

$ sudo dpkg-reconfigure tzdata




$ sudo dpkg-reconfigure tzdata

Current default time zone: 'Etc/GMT-6'
Local time is now:      Thu Jan 23 11:52:16 GMT-6 2014.
Universal Time is now:  Thu Jan 23 05:52:16 UTC 2014.


现在当我们检出时:
<注意:在Ubuntu 14.04及更高版本中,也可以通过单个命令使用此选项(来源:Ask Ubuntu-设置时区e来自终端):

$ date -u
Thu Jan 23 05:53:32 UTC 2014

$ date 
Thu Jan 23 11:53:33 GMT-6 2014


关于“ Etc / GMT + 6”的使用

摘自@MattJohnson关于SO的答案
故意将Etc/GMT+6之类的区域反转,以向后兼容POSIX标准。请参阅此文件中的注释。

您几乎永远不需要使用这些区域。相反,您应该使用全名的时区,例如America/New_YorkEurope/London或适合您所在位置的任何时区。请参阅此处的列表。


评论


在这里参考这个问题的答案stackoverflow.com/questions/21282367/timezone-setting-in-linux

–拉胡尔·多比(Rahul Dhobi)
2014年1月23日7:22

@ user3184706-您在这里有些混乱。您在这里的问题是如何更改时区,我回答了。 SO A提供的关于使用GMT ..时区与否有关的信息是准确的,但是我忽略了将其包含在此处,因为尽管我没有真正问过这个问题。我可以将该位添加到此A中,也可以在此处复制/粘贴该信息作为您自己的A。

–slm♦
2014年1月23日下午7:47

@ user3184706-尝试解决此问题,我将Matt的A包括在内以使其完整。

–slm♦
2014年1月23日下午7:56

但是请注意,如果您在容器中,则必须在Ubuntu中安装tzdata软件包,否则/ usr / share / zoneinfo中的文件将不存在。

–艾略特·斯劳特
18/09/5在23:30

timedatectl也适用于SLES 12。

–亚历山大·马拉霍夫(Alexander Malakhov)
19年8月15日在11:10

#2 楼

这就是我在Ubuntu中的操作方式。只需将Asia/Tokyo替换为您自己的时区即可。

echo 'Asia/Tokyo' | sudo tee /etc/timezone

sudo dpkg-reconfigure -f noninteractive tzdata

tzdata中存在错误:某些值已由dpkg-reconfigure标准化:

echo 'US/Central' >/etc/timezone
dpkg-reconfigure -f noninteractive tzdata
# Current default time zone: 'America/Chicago'

echo 'US/Eastern' >/etc/timezone
apt-get install --reinstall tzdata
# Current default time zone: 'America/New_York'


评论


这也可行,但是在Debian / Ubuntu中,slm的答案可能更容易且风险更低(没有错别字的机会)

–安德烈亚斯·哈特曼(Andreas Hartmann)
17年11月18日在19:05

#3 楼

使用tzselect命令可以执行所需的操作。

评论


并将其压缩为将TZ变量设置为您当地时区的一行(例如,对于America / Los_Angeles)-export TZ =`printf“ 2 \ n49 \ n21 \ n1 \ n” | tzselect 2>&1 |尾巴-1`。您可以将这行放在.profile中,如tzselect所建议的那样,如果您在提示符下运行它。

–相同
2015年4月23日在16:48