我刚刚读到POSIXlt
和POSIXct
之间的区别,据说POSIXlt是一种混合文本和字符格式;1985年5月6日"1990-9-1";或";2012年1月20日";。当我尝试这种事情时,我会得到一个错误
as.POSIXlt("May, 6 1985")
# character string is not in a standard unambiguous format
(如何(我们可以用上面引用的格式向POSIXlt
提供日期?这里有消息来源说这种格式有效(如果我做对的话(:1,2。
有关指定时间格式的所有详细信息,请阅读?strptime
。在这种情况下,您需要%b
(表示月份名称(、%d
(日期(和%Y
(4位年份(。(这只适用于英语区域设置,因为月份名称是特定于区域设置的。(
as.POSIXlt("May, 6 1985", format = "%b, %d %Y")
如果您有格式的混合输入,您可以使用lubridate
包中的parse_date_time
。
x <- c("May, 6 1985", "1990-9-1", "1/20/2012")
y <- lubridate::parse_date_time(x, c("ymd", "mdy", "dmy"))
str(y)
# POSIXct[1:3], format: "1985-05-06" "1990-09-01" "2012-01-20"
注意在c("ymd", "mdy", "dmy")
上,因为这决定了第一个找到的第一个转换的顺序。考虑到6-1-2000
将在dmy
之前遇到有效的mdy
,因此这意味着它将是6月1日,而不是1月6日。