我通过将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
#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_York
或Europe/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
评论
是否设置了TZ环境变量(回显$ TZ不会产生空行)?另外,最好是创建到/ etc / localtime的符号链接,而不是复制实际文件(这样可以确保安全,以防zoneinfo数据发生变化,而这很可能永远不会发生)是一个更好的主意。什么是发行版?不同的发行版对此有不同的处理方式!
@slm:我正在使用ubuntu 12.04
您可能不知道此政策,但是您不希望在不同的SE网站上交叉发布相同的Q。 stackoverflow.com/questions/21282367/timezone-setting-in-linux
“这个问题已经发布在多个站点上了”呵呵,对我来说这是一个新问题。从来没有遇到过类似的SE网站。无论如何,这是Google搜索如何更改Linux时区时出现的第一个问题,它是我所见过的最受好评的问题,因此也许应该重新打开它? />