【问题标题】:Parse timestamp with a.m./p.m使用 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:我在这里得到了你的精巧正则表达式...... :)

标签: r timestamp strptime


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-30
      • 2011-10-27
      • 1970-01-01
      • 2019-07-19
      相关资源
      最近更新 更多