lubridate:解析日期为“ 27.10.2013 02A:00”的格式(夏令时)

时间:2018-07-06 12:01:03

标签: r datetime timezone lubridate

我正在尝试使用lubridates 25.10.2013 17:30函数将形式为dmy_hm(..., tz = 'Europe/Brussels')(时区为CET / CEST,但未在字符串本身中指定)的字符串解析为POSIXct。

我的问题是,在解析之后,当CEST切换到CET的那一天有重复的值(时钟向后跳了一个小时)。原因似乎是这种变化在我的数据中的显示方式:CEST 2点02A:00和CET 2点02B:00,这是一个小时后。 dmy_hm(..., tz = 'Europe/Brussels')将两者都解释为CET。

最小工作示例:

> library(lubridate)

> times = c("27.10.2013 01:00", "27.10.2013 02A:00",
            "27.10.2013 02B:00", "27.10.2013 03:00")

> times = dmy_hm(times, tz = "Europe/Brussels")

> times
[1] "2013-10-27 01:00:00 CEST" "2013-10-27 02:00:00 CET"
[3] "2013-10-27 02:00:00 CET"  "2013-10-27 03:00:00 CET"

我的问题是:修复“错误”日期的最佳方法是什么?

我尝试使用which(duplicated(times))查找重复值的索引,并从“错误”值中删除一个小时,但是似乎还有另一个问题:

> times[2] - hours(1)
[1] "2013-10-27 01:00:00 CEST"

为什么从“ 2013-10-27 02:00:00 CET”中删除一小时会导致我进入“ 2013-10-27 01:00:00 CEST”?那不是两个小时的跳跃吗?我希望登陆“ 2013-10-27 02:00:00 CEST””。


编辑:最后一部分是已知问题(请参见https://github.com/tidyverse/lubridate/issues/498)。解决方案是使用dhours()代替hours()

> times[2] - dhours(1)
[1] "2013-10-27 02:00:00 CEST"

0 个答案:

没有答案