R 日期导入,世纪不正确

R 日期导入,世纪不正确,r,date,R,Date,我正在解析一组日期,其格式为“%m/%d/%y”as.Date(dates,format=“%m/%d/%y”)将像“1/01/64”这样的日期转换为“2064-01-01”,但我需要它是“1964-01-01”。我想我可以找到年份在未来的实例,然后减去一个世纪,但这似乎有点荒谬 日期存储为整数天,因此在输入或输出时只有这种格式。至于没有世纪信息的输入,我认为你运气不好。以下是关于%y格式规范的内容?strtime说:“在输入时,值00到68的前缀为20,值69到99的前缀为19,这是2004年

我正在解析一组日期,其格式为“%m/%d/%y”
as.Date(dates,format=“%m/%d/%y”)
将像“1/01/64”这样的日期转换为“2064-01-01”,但我需要它是“1964-01-01”。我想我可以找到年份在未来的实例,然后减去一个世纪,但这似乎有点荒谬

日期存储为整数天,因此在输入或输出时只有这种格式。至于没有世纪信息的输入,我认为你运气不好。以下是关于%y格式规范的内容?strtime说:“在输入时,值00到68的前缀为20,值69到99的前缀为19,这是2004年和2008年POSIX标准规定的行为,但它们也表示‘预计在未来版本中,从两位数年份推断出的默认世纪将发生变化’。”

考虑到Y2K在过去是如此的晚,有可能发起一场关于允许删除世纪信息的程序员的酒吧大战


由于默认设置是假定00-68年为2000-2068年,因此当然可以创建as.Dateshift,另一种修复日期的方法是将未来发生的所有年份(使用Sys.date()相对于今天的日期)更改为从19开始,而不是从20开始

dates=as.Date(c("01/01/64", "12/31/15"))
# [1] "2064-01-01" "2015-12-31" ## contains an incorrect date

## Now correct the dates that havn't yet occurred
as.Date(ifelse(dates > Sys.Date(), format(dates, "19%y-%m-%d"), format(dates)))
#[1] "1964-01-01" "2015-12-31"

当日期出错时,我用条件句减去一个世纪。当然,使用4位数年份的数据会更好,但这有点蹩脚,你不能指定解析函数的行为。问题是你将谁称为“蹩脚”?哈,我想这是我认为非常适合as.Date函数的功能。我也不确定POSIX标准背后的逻辑来自何方。Ofc两者都有很好的理由。。。
dates=as.Date(c("01/01/64", "12/31/15"))
# [1] "2064-01-01" "2015-12-31" ## contains an incorrect date

## Now correct the dates that havn't yet occurred
as.Date(ifelse(dates > Sys.Date(), format(dates, "19%y-%m-%d"), format(dates)))
#[1] "1964-01-01" "2015-12-31"