使用 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.

如何使用strptimeas.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 事件中解析时间戳时出错 - 时间戳为空

怎么将服务器json解析后的时间戳 转换成时间

php怎么把中文日期转换成时间戳

如何在 Hive 中使用正则表达式来解析 Apache 日志时间戳?

Spring Boot数据休息时间戳解析错误