如何处理lubridate的默认值ymd

问题描述:

ymd from lubridate,默认值tzUTC。我不知道确切的更改时间,但我知道在1.5版本中默认值是UTC,但是在1.5.8版本中,默认值现在是NULL如何处理lubridate的默认值ymd

这改变的ymdPOSIXct对象Date对象,打破了很多我的代码,我靠有POSIXct对象的输出,但是现在有一个Date。有没有一种方便的方法来实现向后兼容,还是我需要将tz='UTC'添加到所有依赖于此的旧代码?

写一个包装与ymd_hms取代ymd的量,默认仍然tz = "UTC"

library(lubridate) 
ymd2 = function(x){ 
    ymd_hms(paste(x, "00:00:00")) 
} 

ymd2("2017/3/4") 
#[1] "2017-03-04 UTC" 

class(ymd2("2017/3/4")) 
#[1] "POSIXct" "POSIXt" 
+0

是的,我认为有关使包装等'ymd2

+0

那么你可以命名包装器'ymd',然后用里面的'tz'参数调用'lubridate :: ymd',以避免名称冲突...然后你不必在现有代码中替换所有'ymd'调用,只需加载该功能即可。否则,您可能会使用旧版本的'lubridate'卡住。在这种情况下'packrat'包可能会有用。 – mikeck

+1

您还可以发布功能请求以在'options'中获得默认的tz选项:https://github.com/tidyverse/lubridate/issues。我怀疑你是唯一有这个版本兼容性问题的人。 – mikeck