我正在尝试使用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"