在R中转换简单的AM / PM时间

时间:2016-09-08 20:39:56

标签: r

我搜索并搜索了几个小时,但找不到答案。我需要转换时间格式为“1:36:22 PM”。我自己不会以这种格式存储数据,但我从其他程序员那里继承了这些文件。

我尝试了as.POSIXct()和strptime()的各种排列,但是无法实现。例如,这未能发现PM的重要性:

t <- "1:36:22 PM"
> as.POSIXct(t, format = "%H:%M:%S")
[1] "2016-09-08 01:36:22 BST"

然后失败了:

> strptime(t, "%H:%M:%S")
[1] NA

奇怪的是,由于我无法理解的原因,从输入CAN中删除秒数:

> t <- "1:30:00 PM"
> strptime(t, "%I:%M %p")
[1] NA
> t <- "1:30 PM"
> strptime(t, "%I:%M %p")
[1] "2016-09-08 13:30:00 BST"

我想要的就是让它发挥作用:

t <- "1:30:00 PM"
SOME COMMAND HERE HERE
[1] "13:30:00"

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

使用%l和%p。

strptime(t, "%l:%M:%S %p")

答案 1 :(得分:2)

您是否尝试过使用lubridate包装?它可以使用“parse_date_time”函数中的%p指示符来处理AM / PM。

  awk '
# start writing to new segment file segment.01 etc
match($0, /<BaseURL>([0-9]+)\/<\/BaseURL>/, m) {
  base=m[1]
  close(segf)
  segf="segment." base
  print "write segments to " segf
  print >segf
}
/<SegmentURL / {print >segf}
END {close(segf)}
' mpd

来自lubridate documentation

%I: 小时数十进制数(01-12或1-12)。

%M: 分钟为十进制数字(00-59或0-59)。

%S: 秒作为十进制数字(00-61或0-61)。

语言环境中的

%P: AM / PM指示符。与I一起使用而不与H.一起使用。某些语言环境中的空字符串。