R的as.POSIXct函数给出了NA,30多种格式的测试,时间包括AM / PM

时间:2015-08-20 16:20:23

标签: r datetime statistics

我正在尝试将以下日期/时间字符串转换为POSIXct对象:

19 Aug 2015 11:34 am

我尝试了30多种方法。仍在获得NAs。

以下是不起作用的脚本列表(仅4个示例):

as.POSIXct(toupper("19 Aug 2015 11:34 am"), format = "%d %b %Y %I:%M %p")
as.POSIXct(toupper("19 Aug 2015 11:34 am"), format = "%d %B %Y %I:%M %P")
as.POSIXct("19 Aug 2015 11:34 am", format = "%d %b %Y %I:%M %p")
as.POSIXct(toupper("19 Aug 2015 11:34 am"), tz = "UTC", format = '%d %b %Y %I:%M %p')

等。哪里出错了?

3 个答案:

答案 0 :(得分:3)

如果您是英语,请尝试:

as.POSIXct("19 Aug 2015 11:34 am", format = "%d %b %Y %I:%M %p")

如果没有,请尝试:

Sys.setlocale("LC_ALL","English")
as.POSIXct("19 Aug 2015 11:34 am", format = "%d %b %Y %I:%M %p")

说明:strptime是用于更改为POSIXct的格式化函数,它使用您的语言环境中的月份名称,如Sys.getlocale(category = "LC_TIME")中所示。如果您提供数月的英文名称,如果您的语言环境不是英语,则无法获得匹配。

答案 1 :(得分:0)

使用toupper的问题在于它也会使您的月份不足,这与标准不符。但是您可以使用正则表达式更精确地定位am / pm位:

yourtime <- c("19 Aug 2015 11:34 am", "19 Aug 2015 11:34 pm")

# Regular expressions to the rescue!
y <- sub(pattern = "(am|pm)", replacement = "\\U\\1", x = yourtime, perl = TRUE)

# Just AM and PM have been capitalized
y

# No problems, now
as.POSIXct(y, format = "%d %b %Y %I:%M %p")

答案 2 :(得分:-1)

首先设置区域设置,然后尝试转换:

Sys.setlocale("LC_TIME", "C")
as.POSIXct("19 Aug 2015 11:34 am", format = "%d %b %Y %I:%M %p")