R 使用夏令时润滑天花板_日期错误

R 使用夏令时润滑天花板_日期错误,r,lubridate,R,Lubridate,我使用R包lubridate来处理受夏令时影响的日期时间。例如,我的时区是澳大利亚/阿德莱德,2017年,时钟在2017年4月2日(星期日)0300时后退一小时,在2017年10月1日(星期日)0200时前进一小时 但是,函数lubridate::天花_date在夏令时的行为异常 假设我们有以下向量: dt_1 <- lubridate::ymd("2017-10-01", tz = "Australia/Adelaide") %>% magrittr::add(lubrid

我使用R包lubridate来处理受夏令时影响的日期时间。例如,我的时区是澳大利亚/阿德莱德,2017年,时钟在2017年4月2日(星期日)0300时后退一小时,在2017年10月1日(星期日)0200时前进一小时

但是,函数lubridate::天花_date在夏令时的行为异常

假设我们有以下向量:

dt_1 <- lubridate::ymd("2017-10-01", tz = "Australia/Adelaide") %>%
    magrittr::add(lubridate::hours(c(0,1,23,24)))

dt_2 <- lubridate::ymd("2017-04-02", tz = "Australia/Adelaide") %>%
    magrittr::add(lubridate::hours(c(0,1,23,24)))
然而,
lubridate::limition_date
生成的日期不是午夜

lubridate::ceiling_date(dt_1, unit = "days")
[1] "2017-10-01 00:00:00 ACST" "2017-10-02 01:00:00 ACDT" "2017-10-02 01:00:00 ACDT" "2017-10-02 00:00:00 ACDT"

lubridate::ceiling_date(dt_2, unit = "days")
[1] "2017-04-02 00:00:00 ACDT" "2017-04-02 23:00:00 ACST" "2017-04-02 23:00:00 ACST" "2017-04-03 00:00:00 ACST"
  • 从每个输出向量的第一个元素来看,转换日期午夜的
    ceiling\u date
    是正确的(每个向量的第一个元素)
  • 从每个输出向量的第四个元素来看,转换日期后午夜的
    ceiling\u date
    是正确的(每个向量的第四个元素)
  • 但是,从每个向量的第二和第三个元素来看,午夜后转换日期的日期时间产生的日期时间为午夜前或午夜后一小时。这在转换时间之前和之后都是正确的
如果这不是错误,那么肯定是意外行为。

此问题(由另一位用户在上单独报告)现在已从lubridate 1.7.3解决

lubridate::ceiling_date(dt_1, unit = "days")
[1] "2017-10-01 00:00:00 ACST" "2017-10-02 01:00:00 ACDT" "2017-10-02 01:00:00 ACDT" "2017-10-02 00:00:00 ACDT"

lubridate::ceiling_date(dt_2, unit = "days")
[1] "2017-04-02 00:00:00 ACDT" "2017-04-02 23:00:00 ACST" "2017-04-02 23:00:00 ACST" "2017-04-03 00:00:00 ACST"