lubridate的怪异行为:将特定天数添加到特定日期会产生NA

lubridate的怪异行为:将特定天数添加到特定日期会产生NA,r,lubridate,R,Lubridate,我正在使用lubridate对日期执行多个操作,在某个时候,我需要在我使用的日期前添加6天。我在循环中这样做,它几乎适用于每个日期,但在这个特定日期,总和返回NA library(lubridate) testDate <- ymd("2018-10-29", tz = "America/Sao_Paulo") testDate + days(4) #OK testDate + days(5) #OK testDate + days(6) #Returns NA testDate + d

我正在使用
lubridate
对日期执行多个操作,在某个时候,我需要在我使用的日期前添加6天。我在循环中这样做,它几乎适用于每个日期,但在这个特定日期,总和返回
NA

library(lubridate)
testDate <- ymd("2018-10-29", tz = "America/Sao_Paulo")

testDate + days(4) #OK
testDate + days(5) #OK
testDate + days(6) #Returns NA
testDate + days(7) #OK
testDate + days(8) #OK
testDate + days(9) #OK

正如@akrun所建议的,这是夏令时的问题。查看
6
之前和之后的天数:

format(testDate+days(c(5,7)),format=“%Y-%m-%d%H:%m:%S”)
# [1] "2018-11-03 00:00:00" "2018-11-05 00:00:00"
您会注意到,它假定为“午夜”(正如人们所预料的)

2018年,在巴西圣保罗,它于4日午夜向前滚动(),午夜:

当当地标准时间即将达到 2018年11月4日,星期日,12:00:00午夜时钟向前拨了一小时 2018年11月4日星期日,当地夏时制改为凌晨1:00:00

这意味着11月3日23:59:59存在,但只要它向前一秒,它就变成了11月4日01:00:00。这表明(数学上)11月3日00:00:00根本不存在

因此,R通过返回
NA
来告诉您时间戳不是合法的时间

但是,您可以非常轻松地处理
Date
对象:

testDate+天(5:7)
#[1]“2018-11-03-03”NA“2018-11-05-02”
截止日期(测试日期)+天(5:7)
# [1] "2018-11-03" "2018-11-04" "2018-11-05"

您是否已检查日光节约相关:
R version 3.6.0 (2019-04-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 17763)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] lubridate_1.7.4

loaded via a namespace (and not attached):
[1] compiler_3.6.0 magrittr_1.5   tools_3.6.0    Rcpp_1.0.3     stringi_1.4.3  stringr_1.4.0