【问题标题】:Set dst with lubridate用 lubridate 设置 dst
【发布时间】:2018-01-09 22:59:29
【问题描述】:

我想将每小时法语时间的字符序列转换为 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:是/否)来告诉 lubridate 选择哪个时区。

【问题讨论】:

    标签: r dst lubridate posixct


    【解决方案1】:

    检查是否有重复值(从末尾开始)并减去 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" 
    

    【讨论】:

      猜你喜欢
      • 2018-10-19
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 2020-04-08
      • 2019-03-12
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      相关资源
      最近更新 更多