夏令时期间的时区问题

夏令时期间的时区问题

我只是被夏令时困扰了

我似乎3rd November 2013 01:00:00开始于 EST 时间

现在我将时间设置为 2013 年 11 月 3 日 00:58:xx(几秒)

然后运行date

它给了我有效的时区,即EDT

即使时间已经过了 01:00:00 我仍然查询日期库

我仍然认为时区EDTEST

看看这个截图在此处输入图片描述

你可以清楚地看到时区显示为 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 点。

相关内容