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

标签 r date timezone dst posixct

我在“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"

最佳答案

您提供的时间不明确。由于时钟在 2 点“倒退”,这些天的本地时间 1:58 每天出现两次,一次在美国东部时间,一次在美国东部时间。

两者都是正确的,因为您没有指定您的意思。

操作系统库代码将(可能)使用迭代算法,当派生的 time_t 值与传递给 mktime 的 struct tm 值一致时结束。因此,结果基本上是随机的。

这是一个例子:

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

关于r - 为什么 R 多年来不一致地处理夏令时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32237724/

相关文章:

javascript - Angular/Javascript 日期中的夏令时

javascript - moment.js、时区和夏令时

datetime - Erlang:带有时区算法的时间戳

r - 上传,转换xlsx文件和下载结果 Shiny

r - 如何在删除提示后始终如一地绘制一棵树?

java - 如何将值插入数据库的类型日期列?

JavaScript 将日期转换为格式

r - 如何计算弹性

r - 预测函数中类型 ="response"、 "terms"和 "link"之间有什么区别?

java - 如何在没有 Joda Time 的情况下在 Java 7 中正确处理夏令时?