为什么R不能在多年内持续处理夏令时?

时间:2015-08-26 22:26:47

标签: r date timezone dst posixct

我在美国/底特律"之间转换时间戳时遇到了一个奇怪的情况。和" GMT"。经过仔细检查,我发现在2010年和2011年,夏令时结束时间的上午1点到2点之间的R转换时间不同。2010年,它将这些时间列为在#ED;" 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"

1 个答案:

答案 0 :(得分:3)

你给的时间含糊不清。因为时钟倒退了#34;在2,当地时间1:58这些天每天发生两次,一次在EDT,再次在EST。

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

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

以下是一个例子:

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