lubridate::isoyear() 返回了意外的输出

3

我正在使用lubridate包来处理R语言中的日期。但是,isoyear()函数返回了一个意外的结果。

library(lubridate)      

isoyear("2014-12-31")  
[1] 2015    

year("2014-12-31")  
[1] 2014  

isoyear()函数会返回2014-12-31所在的年份为2015,而year()函数则会返回2014。显然,我期望的是year()函数的返回结果。

有人能解释一下isoyear和year之间这种行为差异吗?我想不出任何情况下我会希望2014-12-31返回2015年份的结果。

1个回答

4
请注意,输出结果为公历年份。
ISO年号与公历年份的数字可能有所偏差,如果公历年的开始是星期五、星期六和星期日,或者是星期六和星期日,或只是星期日(这些日期在上一个ISO年的末尾),并且在公历年的结束时是星期一、星期二和星期三,或者是星期一和星期二,或只是星期一(这些日期在下一个ISO年的第01周)。
在4月1日至12月28日以及所有星期四中,ISO年号始终等于公历年号。请看以下例子,这是在12月29日至1月3日之间存在差异的情况:
library(lubridate)
isoyear(ymd("2005-01-01"))
[1] 2004
isoyear(ymd("2008-12-30"))
[1] 2009

这并不是 bug……它只是遵循ISO 年份的计算方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接