我只是被夏令时困扰了
我似乎3rd November 2013 01:00:00
开始于 EST 时间
现在我将时间设置为 2013 年 11 月 3 日 00:58:xx(几秒)
然后运行date
它给了我有效的时区,即EDT
但
即使时间已经过了 01:00:00 我仍然查询日期库
我仍然认为时区EDT
为EST
看看这个截图
你可以清楚地看到时区显示为 EDT,即使它是 EST
有谁知道这个
更新
我还发现,如果我重新启动机器,就会看到这个
答案1
您描述的行为符合预期。 请参阅此网站以进行详细确认。您可能还想查看说明这里。
由于夏令时在秋季结束,时钟向后移动,我们称之为“倒退”过渡。由于您的时钟接近凌晨 2:00,则改为凌晨 1:00。重复 1:00:00 到 1:59:59.999 的当地时间。到 2:00 时,已经重复了 1:00 的第二次时间,夏令时早已结束。
当偏移量为 UTC-04:00 时,我们使用标签 EDT 表示东部夏令时,当偏移量为 UTC-05:00 时,我们使用标签 EST 表示东部标准时间。因此,EDT 和 EST 不是不是一样。它做无论您身处哪一个,尤其是在过渡当天的 1:00 时。
时钟像这样前进:
...
00:59:58 EDT (-0400)
00:59:59 EDT (-0400)
01:00:00 EDT (-0400) --+
01:00:01 EDT (-0400) |--- 1st instance of 1:00 hour
... |
01:59:59 EDT (-0400) --+
01:00:00 EST (-0500) --+ <---- transition
01:00:01 EST (-0500) |
... |--- 2nd instance of 1:00 hour
01:59:59 EST (-0500) --+
02:00:00 EST (-0500)
02:00:01 EST (-0500)
...
还请记住,当您将时间设置为当地时间 1:00 时,您还不够具体。由于 1:00 有两个实例,因此操作系统只会为您选择一个。在 Linux 和 Mac OSX 上,底层系统时钟保持为 UTC。1:00 EDT 是 5:00 UTC,而 1:00 EST 是 6:00 UTC。
重启机器应该不会有什么影响。我猜你没有立即重启它,而是让时间流逝,所以它又倒退了。
附加信息
看看date
命令手册页。我们可以根据当地时间设置时钟,使用有点奇怪的格式,[[[mm]dd]HH]MM[[cc]yy][.ss]
所以这是过渡当天的当地时间 1:00:
date 110301002013
但这并不是很具体,因此操作系统可能会选择 EDT,因为这是第一个实例。不过,由于我们没有指定,它也可能选择 EST。
相反,考虑按 UTC 设置它:
date -u 110305002013 (1:00 EDT)
or
date -u 110306002013 (1:00 EST)
答案2
我不确定如何date
选择时区,但可以通过环境变量覆盖它TZ
。您的两个屏幕截图(重新启动之前/之后)之间的差异是因为date
的默认时区选择已更新。所有时间始终是正确的;这只是一个底层时间如何以字符串形式打印的问题。
不知道这是否有助于解决您的困惑的根源,但我发现它很有帮助:
EDT 和 EST 是只是两个不同的时区,并且它们全年都存在。通常人们只在旅行时才更改默认时区,但在某些地区,人们也会在某些时刻更改默认时区。例如,在 2013.Nov.03 05:59 GMT,美国东海岸的人们倾向于以 EDT 打印时间;而在 2013.Nov.03 06:01 GMT,他们会突然以 EST 打印所有日期。
如果有人说“14:30 见”,您需要知道他们使用的时区,才能确保其含义明确。@Matt 的回答阐明了人们在没有明确说明时区的情况下如何解释时区。
答案3
edt 和 est 是同一时区,只是 edt 代表夏季(夏令时),而 est 代表冬季(标准时间)。只要您的时钟读取正确的时间,这并不重要。另外,est 直到凌晨 2 点才开始,而不是凌晨 1 点。