4

我正在尝试使用 R 中的 as.Date() 将“07,29,30”转换为日期格式。

(注意字符串的格式是“mm,dd,yy”,即 1930 年 7 月 29 日)

所以我使用了以下代码:

as.Date("07,29,30", format = "%m,%d,%y")

但是我返回的年份是 2030 年,而不是 1930 年。我如何告诉 R 将值转换为一个世纪前的日期?

4

4 回答 4

2

无论如何我都会输入:

# use this library
library(lubridate)

# convert to the format (your way or you acn use lubridate)
dateconvert <- as.Date("07,29,30", format = "%m,%d,%y") 

# get the year
inputYear <- year(dateconvert)

# convert the year
year(dateconvert) <- ifelse(inputYear > 2000, 1900 + (inputYear %% 100), inputYear)
于 2017-04-13T13:23:04.017 回答
2

因为 00 到 68 之间的年份值被编码为 20 代表世纪。从strptime文档来看,这似乎是以下原因。

“没有世纪的年份 (00–99)。在输入时,值 00 到 68 以 20 为前缀,而 69 到 99 以 19 为前缀——这是 2004 年和 2008 年 POSIX 标准规定的行为,但他们也说‘这是预期的在未来的版本中,从 2 位数年份推断的默认世纪将会改变'。”

您可以使用以下代码对其进行重新编码。

d <- as.Date("07,29,30", format = "%m,%d,%y")

> as.Date(ifelse(d > today(), format(d, "19%y-%m-%d"), format(d)))
[1] "1930-07-29"
于 2017-04-13T13:46:43.457 回答
1

要解决此问题,请使用strtotime()and date()

$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
于 2017-04-13T13:32:12.367 回答
1

尝试以下操作: format(as.Date("07,29,30", format = "%m,%d,%y"), "19%y-%m-%d")

于 2017-04-13T14:02:28.553 回答