r - 为什么 chron 包从 2030 年开始奇怪地对待两位数的年份?

标签 r date chron

我最近注意到 R 中有一个我无法解释的奇怪行为。我在一些旧代码中有这个:

以下应生成从 01/1980 -> 01/2029 的月份列表,并且按预期工作:

length(chron::seq.dates("01/31/80", "01/03/29", by="months"))
[1] 588

这就是事情变得奇怪的地方。以下内容与上面相同,但应生成 2030 年之前的日期:

length(chron::seq.dates("01/31/80", "01/03/30", by="months"))
Error during wrapup: "from" must be a date before "to"

那么这里发生了什么?

最佳答案

当将两位数年份扩展为四位数年份时,默认情况下 chron 截止值为 30。也就是说,如果两位数年份小于 30,则假定为 20yy,否则为 19yy。这是由 chron.year.expand 选项控制的,该选项默认设置为 chron year.expand 函数,该函数又具有默认截止值 30,但这可以是更改如下:

library(chron)

# change cutoff to 50
options(chron.year.expand = 
     function (y, cut.off = 50, century = c(1900, 2000), ...) {
        chron:::year.expand(y, cut.off = cut.off, century = century, ...)
     }
)

length(seq.dates("01/31/80", "01/03/30", by="months"))
## [1] 600

这些中的每一个都可以工作,并且不需要设置 chron.year.expand:

length(seq(as.chron("1980-01-31"), as.chron("2030-01-03"), by="months"))

length(seq.dates("01/31/80", as.chron("2030-01-03"), by="months"))

length(seq.dates("01/31/80", chron(julian(1, 3, 2030)), by="months"))

length(seq.dates("01/31/80", julian(1, 3, 2030), by="months"))

length(as.chron(seq(as.Date("1980-01-31"), as.Date("2030-01-03"), by = "month")))

length(seq.dates("01/31/80", length = 600, by="months"))

关于r - 为什么 chron 包从 2030 年开始奇怪地对待两位数的年份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59568667/

相关文章:

ruby : Find a Date in a array of strings

r - 在 R 4.0 中执行 NA 替换时出错

R:将 "special"字母转换为 UTF-8?

php - 按日期第几行对sql输出进行排序

r - 在R中选择一个带窗口的时间段;格式 "dd/mm/yyyy h:m:s"(Windows 7)

sql - 使用 sqldf 保留时间类

r - 间隔 R 内的周末日期

r - 使用 pwr 和 R 进行多元回归的功效分析

r - 使用 R 快速计算子集

java - 简单日期格式将下午时间错误地解析为上午时间