为什么 R 多年来不一致地处理夏令时?

Why does R not handle daylight savings consistently among years?

我在 "America/Detroit" 和 "GMT" 之间转换时间戳时遇到了一个奇怪的情况。仔细检查后,我发现 R 在 2010 年和 2011 年夏令时结束当天凌晨 1 点到 2 点之间转换的时间不同。在 2010 年,它将这些时间列为 "EDT",而在 2011 年,它将这些时间列在 "EST"。结果是转换为 GMT 在一种情况下增加了 4 小时,在另一种情况下增加了 5 小时。任何人都可以了解这种情况并提出纠正这种不一致的解决方案吗?

a = as.POSIXct("2010-11-07 01:58:00", tz = "America/Detroit")
#[1] "2010-11-07 01:58:00 EDT"

b = as.POSIXct("2011-11-06 01:58:00", tz = "America/Detroit")
# [1] "2011-11-06 01:58:00 EST"

format(c(a,b), tz = "GMT")
# [1] "2010-11-07 05:58:00" "2011-11-06 06:58:00"

你给的时间不明确。由于时钟 "fallen back" 2 点,这些天的当地时间 1:58 每天出现两次,一次在美国东部时间,一次在美国东部时间。

两者都是正确的,因为你没有说明你的意思。

此 OS 库代码将(可能)使用迭代算法,当导出的 time_t 值与传递给 mktimestruct tm 值一致时结束.因此,结果基本上是随机的。

这是一个例子:

http://www.opensource.apple.com/source/ntp/ntp-13/ntp/libntp/mktime.c