将 "Mon Day, Year Time am/pm" 格式的日期字符串转换为 R 中的 POSIXlt 格式?

Convert Date String in Format "Mon Day, Year Time am/pm" to POSIXlt format in R?

我正在尝试将字符串转换为日期时间。不过,我什至无法让 R 识别和格式化月份。

这是日期格式的示例:

> for(i in sample_times){print(i)}
[1] "Aug 17, 2015 08:00 am"
[1] "Aug 15, 2015 12:06 am"
[1] "Jun 19, 2013 05:54 pm"
[1] "Aug 23, 2015 07:16 pm"
[1] "Aug 13, 2015 11:04 pm"
[1] "May 28, 2015 04:00 pm"
[1] "Jul 27, 2014 11:00 pm"
[1] "Aug 18, 2015 02:46 pm"
[1] "Aug 19, 2015 05:06 am"
[1] "Aug 25, 2015 07:27 pm"
[1] "Mar 12, 2014 10:14 am"
[1] "Aug 15, 2015 01:08 pm"
[1] "Aug 14, 2015 12:05 am"
[1] "Aug 18, 2015 11:07 am"
[1] "Aug 22, 2015 10:07 am"
[1] "Aug 24, 2015 12:38 pm"
[1] "Aug 21, 2015 08:17 pm"
[1] "Aug 23, 2015 08:34 pm"
[1] "Jun 11, 2015 09:44 pm"
[1] "Aug 23, 2015 01:54 pm"

只是调用 strptime 失败。 Returns NAs.

这是我尝试过的一个例子,只是为了让这个月结束:

strptime(x = tolower(substr(sample_times, 0, 3)), format = "%b")

这 returns NA 用于每个值,即使 tolower(substr(sample_times, 0, 3)) returns 小写月份缩写

> tolower(substr(sample_times, 0, 3))
 [1] "aug" "aug" "jun" "aug" "aug" "may" "jul" "aug" "aug" "aug" "mar" "aug" "aug" "aug" "aug" "aug" "aug" "aug" "jun" "aug"

如何将日期字符串转换为 POSIXlt 格式?抱歉,如果这是一个新问题:刚刚开始使用 R 中的时间格式。

您需要在 as.POSIXlt()

中使用格式 "%b %d, %Y %I:%M %p"
  • %b 缩写月份(在当前语言环境中)
  • %d 今天
  • %Y 完整的四位数年份
  • %I 表示小时(使用 %p a.k.a am/pm 时)
  • %M分钟
  • %p 对于 am/pm

所以对于 POSIXlt 日期时间,您可以

(x <- as.POSIXlt("Aug 19, 2015 07:09 am", format = "%b %d, %Y %I:%M %p"))
# [1] "2015-08-19 07:09:00 PDT"

如评论中所述,您必须创建整个 POSIX 对象才能提取其部分(好吧,无论如何要正式提取它们)。

months(x)
# [1] "August"
months(x, abbreviate = TRUE)
# [1] "Aug"

此外,为了使用 strptime(),您必须计划创建整个日期时间对象,因为您不能只创建月份并将其归类为月份。有关更多信息,请参阅 help(strptime)help(as.POSIXlt)