我正在尝试使用 R 中的 as.Date() 将“07,29,30”转换为日期格式。
(注意字符串的格式是“mm,dd,yy”,即 1930 年 7 月 29 日)
所以我使用了以下代码:
as.Date("07,29,30", format = "%m,%d,%y")
但是我返回的年份是 2030 年,而不是 1930 年。我如何告诉 R 将值转换为一个世纪前的日期?
无论如何我都会输入:
# 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)
因为 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"
要解决此问题,请使用strtotime()
and date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
尝试以下操作: format(as.Date("07,29,30", format = "%m,%d,%y"), "19%y-%m-%d")