as.Date行为大数字参数

时间:2014-02-06 16:16:30

标签: r

我想了解R date的工作方式。

在开源R中,在99年12月31日之后的一天,日期的字符版本将翻到01/01/0000。

max.date <- as.numeric(as.Date("9999-12-31", origin = '1970-01-01', format = '%Y-%m-%d'))
max.date
as.Date(max.date + 1, origin = '1970-01-01')
as.numeric(as.Date(max.date + 1, origin = '1970-01-01'))

如果您尝试以字符串形式输入日期为31/12/9999的某一天,则会得到缺失值。

as.Date("10000-01-01", origin = '1970-01-01', format = '%Y-%m-%d')

当您在99年12月31日之后将数字参数增加到as.Date时,这些年份就像里程表一样翻转,直到达到2 ^ 32 - 1。

我的问题是为什么今年会翻身,有没有办法控制这个?

1 个答案:

答案 0 :(得分:1)

日期和时间是非常复杂的事情(一旦你考虑闰年和日,不同的格式风格和时区)。正如您所发现的那样,R日期时间类仅处理0001-01-019999-12-31的范围。

即使这样,日期也是格里高利,所以你需要注意1752年之前的日期,或者使用其他日历的国家。

ConvCalendar套餐可以让您转换为其他一些日历系统(一些当前的日历系统,如伊斯兰和中国;一些过时的日历系统,如朱利安和法国革命)。 AFAIK,它们都没有及时伸展到足以处理Warhammer 40k日期。