使用 a.m./p.m 解析时间戳
Posted
技术标签:
【中文标题】使用 a.m./p.m 解析时间戳【英文标题】:Parse timestamp with a.m./p.m 【发布时间】:2011-12-14 14:10:18 【问题描述】:我有一个格式化时间戳的文件,例如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")
【问题讨论】:
?strptime
表示 %p
是“区域设置中的 AM/PM 指示符”。 stdcxx.apache.org/doc/stdlibref/time-put.html 在 C 语言环境中表示它是 AM/PM,所以我认为您必须首先使用 sub("a.m","AM",...)
和 sub("p.m.","PM",...)
。 (可能有一个巧妙的正则表达式可以一次性完成所有操作。)
@BenBolker:我在这里得到了你的精巧正则表达式...... :)
【参考方案1】:
上午/下午指示符似乎不能包含标点符号。去掉标点后试试:
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"
【讨论】:
【参考方案2】:刚刚遇到这个,作为另一种选择,您可以使用stringr
包。
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
【讨论】:
以上是关于使用 a.m./p.m 解析时间戳的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSDateFormatter 从 VBO 文件中解析日期/时间戳
Android/Firebase - 在 GCM 事件中解析时间戳时出错 - 时间戳为空