r - lubridate:解析“27.10.2013 02A:00”形式的日期(夏令时)
问题描述
我正在尝试25.10.2013 17:30
使用 lubridates 函数将形式的字符串(时区是 CET/CEST,但这未在字符串本身中指定)解析为 POSIXct dmy_hm(..., tz = 'Europe/Brussels')
。
我有一个问题,在解析后,在 CEST 切换到 CET 的那一天有重复的值(时钟跳回一小时)。原因似乎是我的数据中显示这种转变的方式:02A:00
对于 2 点钟 CEST 和02B:00
2 点钟 CET,这是一小时后。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"
解决方案
推荐阅读
- python - 使用给定元组的算术运算
- apache-spark - 在 zeppelin 中使用 udf 查询已注册的临时表时如何修复 ClassCastException?
- eclipse - jar 中的路径 - Eclipse
- excel - 如果在当前公式中添加了额外的 if 语句,Excel 公式将无法正常工作
- java - Spring Boot postgresql 安装配置失败
- excel - 如何在 Excel 宏中使用 stdeva
- javascript - 灯廊动态。添加alt属性
- python - 试图在 TKinter 中加载图像但在应该有任何想法的地方获得空白?
- python - 将我的函数修补为随机 randint 函数
- kubernetes - 无法设置 kubernetes ingress-nginx