如何让lubridate的parse_date_time()识别闰年的12月31日?
解决lubridate中parse_date_time解析闰年第366天的问题
我有一组日数向量(非闰年1-365,闰年1-366)和年份向量,使用lubridate包的parse_date_time()函数转换为yyyy-mm-dd格式日期时,遇到了闰年12月31日的解析问题:函数无法识别闰年,会返回NA,且2月之后的日期还会出现年份偏移。
问题复现代码
> parse_date_time(366,2004, order = "j", tz="UTC") [1] NA Warning message: 1 failed to parse.
非闰年正常解析示例
> parse_date_time(336,2005, order = "j", tz="UTC") [1] "2023-12-02 UTC"
我知道lubridate有leap_year()函数,但它仅适用于已转换为日期格式的数据,无法解决当前未解析的问题。
解决方案
将日数和年份拼接成字符串,同时在parse_date_time()中指定order = "j,Y",让函数同时解析年和日序数,即可正确识别闰年的第366天。
向量场景示例(解决方案验证)
> j<-c(4,342,366) > y<-c(2013,2015,2012) > parse_date_time(paste(j,y), order = "j,Y", tz="UTC")%>%as_datetime() [1] "2013-01-04 UTC" "2015-12-08 UTC" "2012-12-31 UTC"
内容的提问来源于stack exchange,提问作者ghaines
相关产品推荐
相关产品推荐

