12

我有一个格式化时间戳的文件,例如25/03/2011 9:15:00 p.m.

如何使用strptime或将此文本解析为日期时间类as.POSIXct

这是几乎有效的方法:

> as.POSIXct("25/03/2011 9:15:00", format="%d/%m/%Y %I:%M:%S", tz="UTC")
[1] "2011-03-25 09:15:00 UTC"

这是不工作的地方,但我想工作:

> as.POSIXct("25/03/2011 9:15:00 p.m.", format="%d/%m/%Y %I:%M:%S %p", tz="UTC")
[1] NA

我在 MS Windows 上使用 R 版本 2.13.2 (2011-09-30)。我的工作语言环境是“C”:

Sys.setlocale("LC_TIME", "C")
4

2 回答 2

19

看来 AM/PM 指示符不能包含标点符号。去掉标点符号后试试:

td <- "25/03/2011 9:15:00 p.m."
tdClean <- gsub("(.)\\.?[Mm]\\.?","\\1m",td)
as.POSIXct(tdClean, format="%d/%m/%Y %I:%M:%S %p", tz="UTC")
# [1] "2011-03-25 21:15:00 UTC"
于 2011-10-25T01:50:50.573 回答
1

刚遇到这个,作为另一种选择,您可以使用stringrpackage.

library(stringr)
data$date2 <- str_sub(data$date, end = -4) 
# this removes the punctuation but holds onto the A/P values
data$date2 <- str_c(data$date2, 'm') 
# adds the required m
于 2017-01-09T22:44:15.067 回答