我正在尝试将以下日期/时间字符串转换为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')
等。哪里出错了?
答案 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")