【发布时间】:2017-07-11 14:46:04
【问题描述】:
我想计算夏令时和非夏令时之间的时间差。但我不知道如何让 R 知道某个时间是否为夏令时。
例如,凤凰城在夏季不调整夏令时,而美国的大部分地区都这样做。如果我想计算下面的时间差,应该是 3 小时而不是 2 小时。 tzone = "America/Phoenix" 会自动将时间设置为“MST”,这是夏令时,但这不是我想要的。
library(lubridate)
x <- "22/5/2016 23:50"
x <- dmy_hm(x)
x1 <- force_tz(x, tzone = "America/Phoenix")
x2 <- force_tz(x, tzone = "EST")
x1-x2
# The output is "Time difference of 2 hours". But actually it is supposed to be 3 hours.
我尝试通过设置 tzone="EDT" 或 "MDT" 来解决这个问题。但似乎 R 不允许识别这些时区。
> x2 <- force_tz(y, tzone = "EDT")
Warning messages:
1: In as.POSIXct.POSIXlt(lt) : unknown timezone 'EDT'
2: In as.POSIXlt.POSIXct(ct) : unknown timezone 'EDT'
> x3 <- force_tz(y, tzone = "MDT")
Warning messages:
1: In as.POSIXlt.POSIXct(x, tz) : unknown timezone 'EDT'
2: In as.POSIXct.POSIXlt(lt) : unknown timezone 'MDT'
3: In as.POSIXlt.POSIXct(ct) : unknown timezone 'MDT'
【问题讨论】:
-
夏天是三个小时,而不是冬天。看我的回答。
-
谢谢,德克!您的代码有效。但我在代码中的意思是夏令时。我把日期放在月份的前面。为了澄清这一点,我将原始日期修改为 22/5/2016
-
啊。这是一种常见的日期格式,但很容易出错(至少在世界的这个地区)。最好坚持2016-05-22。