用lubridate设置dst

时间:2017-08-02 15:53:23

标签: r dst lubridate posixct

我想将每小时法语时间的字符序列转换为POSIXct 此序列包括在02:00(CEST => CET)的dst时钟更改,这会导致重复的输出时间。

char_dates <- c("2017-10-29 01:00:00",
                "2017-10-29 02:00:00",
                "2017-10-29 02:00:00",
                "2017-10-29 03:00:00")
ymd_hms(char_dates, tz = "Europe/Paris")

输出:

"2017-10-29 01:00:00 CEST" "2017-10-29 02:00:00 CET"  "2017-10-29 02:00:00 CET"  "2017-10-29 03:00:00 CET" 

所需输出(注意第二时区):

"2017-10-29 01:00:00 CEST" "2017-10-29 02:00:00 CEST"  "2017-10-29 02:00:00 CET"  "2017-10-29 03:00:00 CET" 

实现这一目标的好方法是什么?
 我们可以假设日期已经排序,或者用户可以提供布尔向量(dst:yes / no)来告诉lubridate选择哪个时区。

1 个答案:

答案 0 :(得分:0)

检查是否有重复(从结尾)并减去重复值3600(一小时,以秒为单位)。如果您有一个布尔矢量,请使用它而不是duplicated(temp, fromLast = TRUE)

char_dates <- c("2017-10-29 01:00:00",
                "2017-10-29 02:00:00",
                "2017-10-29 02:00:00",
                "2017-10-29 03:00:00")
temp = ymd_hms(char_dates, tz = "Europe/Paris")
temp[duplicated(temp, fromLast = TRUE)] = temp[duplicated(temp, fromLast = TRUE)] - 3600
temp
#[1] "2017-10-29 01:00:00 CEST" "2017-10-29 02:00:00 CEST" "2017-10-29 02:00:00 CET" 
#[4] "2017-10-29 03:00:00 CET"