R 没有始终如一地转换 DST 时间变化的时间

标签 r date timezone dst

在 Windows 机器上使用 R

as.POSIXct('2018-11-04 01:30:00', tz = 'America/Chicago')
# "2018-11-04 01:30:00 CDT"

as.POSIXct('2018-11-04 01:40:00', tz = 'America/Chicago')
# "2018-11-04 01:40:00 CST"

我知道这些时间是模棱两可的(技术上可以是 CDT 或 CST)并且 R 很难解释。然而,这些结果的随机性使得很难转换这些时期的时间。有没有办法解决这个问题,从而获得更一致的结果?

最佳答案

如果您查看整数表示,您会注意到:

# divide by 60 to convert to minutes from seconds
as.integer(as.POSIXct('2018-11-04 01:30:00', tz = 'America/Chicago'))/60
# [1] 25688550

as.integer(as.POSIXct('2018-11-04 01:40:00', tz = 'America/Chicago'))/60
# [1] 25688620

两者相隔 70 分钟,这意味着后者对应于如果 CDT 继续进行则为 2:40;这对我来说似乎很一致。我无法通过快速搜索找到任何引用,尤其是 America/Chicago 时区的夏令时开关的详细信息。

另外,在这种情况下,您可能会考虑查看 POSIXlt 表示:

dput(as.POSIXlt('2018-11-04 01:30:00', tz = 'America/Chicago'))
# structure(list(sec = 0, min = 30L, hour = 1L, mday = 4L, mon = 10L, 
#     year = 118L, wday = 0L, yday = 307L, isdst = 1L, zone = "CDT", 
#     gmtoff = NA_integer_), class = c("POSIXlt", "POSIXt"), tzone = "America/Chicago")

dput(as.POSIXlt('2018-11-04 01:40:00', tz = 'America/Chicago'))
# structure(list(sec = 0, min = 40L, hour = 1L, mday = 4L, mon = 10L, 
#     year = 118L, wday = 0L, yday = 307L, isdst = 0L, zone = "CST", 
#     gmtoff = NA_integer_), class = c("POSIXlt", "POSIXt"), tzone = "America/Chicago")

注意两个对象在 isdst 中的区别...

要继续,我们确实需要找到有关如何划分 CDT/CST 的权威来源。但是 FWIW,切换的确切时间似乎是 1:30:05:

as.POSIXct('2018-11-04 01:30:05', tz = 'America/Chicago')
# [1] "2018-11-04 01:30:05 CDT"

as.POSIXct('2018-11-04 01:30:06', tz = 'America/Chicago')
# [1] "2018-11-04 01:30:06 CST"

(为了弄清楚这一点,我查看了 :) 的输出

with(expand.grid(second = 0:59, minute = 30:40),
     as.POSIXct(sprintf('2018-11-04 01:%02d:%02d', minute, second),
                tz = 'America/Chicago'))

关于R 没有始终如一地转换 DST 时间变化的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53662211/

相关文章:

用于捕获不同日期格式的正则表达式

javascript - 使用utcoffset后如何在momentjs中获取纪元时间

jquery - 使用 jQuery datepicker 计算时区

r - 如何使用聚类协方差矩阵对回归系数进行线性假设检验?

r - 如何将数据框变成简单的特征数据框?

r - 如何以编程方式生成 Unicode 字符向量

Linux 日期时区

r - 在哪里可以学习如何编写 C 代码来加速缓慢的 R 函数?

javascript - 日期和时间的时间戳 javascript

javascript - toLocaleDateString 在 TypeScript 中不起作用?