我认为正如你猜测的那样,
strptime
无法解析你的日期时间字符串,是因为你的地区设置导致的。你的字符串包含了缩写的星期几(
%a
)和缩写的月份(
%b
)。这些时间规范在
?strptime
中有描述:
细节
%a
: 当前系统环境下缩写的星期几名称
%b
: 当前系统环境下缩写的月份名称。
"请注意,缩写名称是特定于平台的(虽然标准规定在C
地区,它们必须是大写英文名称的前三个字母:"
"如果要在输入格式中使用%a
、%b
或%h
,则了解缩写名称是必不可少的:请参阅示例以查看如何检查。"
另请参阅
[...] locales
来查询或设置地区信息。
locales
的问题也适用于 as.POSIXct
、as.POSIXlt
和 as.Date
。
?as.POSIXct
中有:
细节
如果指定了format
,请记住,一些格式规范是特定于地区的,你可能需要通过Sys.setlocale
适当设置LC_TIME
类别。这通常会影响到%b
、%B
(月份名称) 和 %p
(上午/下午) 的使用。
?as.Date
中有:
细节
在适当和可用的情况下,使用与字符字符串转换相关的特定于地区的转换。这会影响天数和月份的名称。
因此,如果字符串中的星期几和月份名称与当前地区不同,
strptime
、
as.POSIXct
和
as.Date
将无法正确解析该字符串,并返回
NA
。
然而,你可以通过更改
locales
来解决此问题:
loc <- Sys.getlocale("LC_TIME")
Sys.setlocale("LC_TIME", "en_GB.UTF-8")
Sys.setlocale("LC_TIME", "C")
x <- "Thu Nov 8 15:41:45 2012"
strptime(x, "%a %b %d %H:%M:%S %Y")
Sys.setlocale("LC_TIME", loc)
使用我的本地环境,我可以重现您的错误:
Sys.setlocale("LC_TIME", loc)
strptime(var,"%a %b %d %H:%M:%S %Y")
strptime
创建了一个POSIXlt
而不是POSIXct
时间对象。最后,请尝试使用as.POSIXct(var, format=...)
,看看是否更顺利。 - Justin