当 /etc/localtime 符号链接到 /usr/share/zoneinfo/GMT 时,为什么 $ date 仍然显示 EST?

Tom*_*Tom 3 centos timezone date

我在我的服务器上设置日期时遇到问题...

$ ls -la /etc | grep localtime
lrwxrwxrwx  1 root root  23 Mar 6  12:07 /etc/localtime -> /usr/share/zoneinfo/GMT
Run Code Online (Sandbox Code Playgroud)

出于某种原因,虽然时间17:31:06是 GMT,但时区后缀是 EST...

$ date
Tue Mar  6 17:31:06 EST 2012
Run Code Online (Sandbox Code Playgroud)

而且硬件时钟也搞砸了 - 10:32:12不是 EST:

$ hwclock --show
Tue 06 Mar 2012 10:32:12 PM EST  -0.000276 seconds
Run Code Online (Sandbox Code Playgroud)

如果我将 hwclock 设置为系统时间或本地时间,它会错误地设置它:

$ hwclock --localtime
Tue 06 Mar 2012 10:34:22 PM EST  -0.000190 seconds
$ date
Tue Mar  6 17:34:24 EST 2012
Run Code Online (Sandbox Code Playgroud)

知道发生了什么吗?

谢谢

vor*_*aq7 6

在处理时间时不要发疯的三个简单规则:


第一:您正在运行 Unix(并且可能是 NTP):确保您已将系统的 BIOS/硬件时钟设置为 UTC
您绝对不需要的最后一件事是您的硬件 (BIOS) 时钟与 Unix 的时区正确以及夏令时开始/结束的时间发生争执。将您的硬件时钟设置为 UTC 让生活更轻松。


第二:当您更改系统范围的时区时,您有时需要注销并重新登录,以便系统了解发生了什么。通常我建议重新启动 - 这可以确保操作系统的每个部分都被踢到头上并了解发生了什么。
当您将机器的时区更改为夏威夷时,您不希望 cron 仍在美国/东部时间运行。


第三:如果您的用户帐户仍然对时区有一个混乱的想法,则可能是设置了TZ环境变量——仔细检查您的.profile和 shell rc 文件。
Unix 不假定系统上的每个用户都在本地时区,因此它允许您在每个用户(或每个外壳)级别上进行覆盖。如果您的系统在(例如)美国/东部时间运行并且您有用户从日本登录,这将非常有用 - 人们喜欢他们的系统报告的时间与墙上的时钟相匹配:)