使用 lubridate 解析 12 小时时间

Parsing 12-hour times using lubridate

我正在尝试使用 lubridate 解析 12 小时的时间。如果我运行

library(lubridate)
times <- c("1:30 AM",  "6:29 AM",  "6:59 AM",  "9:54 AM", "2:45 PM")
hm(times)

我明白了

[1] "1H 30M 0S" "6H 29M 0S" "6H 59M 0S" "9H 54M 0S" "2H 45M 0S"

请注意,未使用 AM/PM 指定。但是,如果时间字符串还包含日期,则解析有效

ymd_hm(paste("01-01-01", times))
[1] "2001-01-01 01:30:00 UTC" "2001-01-01 06:29:00 UTC"
[3] "2001-01-01 06:59:00 UTC" "2001-01-01 09:54:00 UTC"
[5] "2001-01-01 14:45:00 UTC"

在我看来,时间解析函数:hmhms、...无法识别 AM/PM,但日期函数可以。是否可以在不查看日期的情况下进行 12 小时的解析?

[我知道我可以通过解析字符串来做到这一点,但我想知道这是否可能在 lubidate]

这两个对象属于不同的 classes,每一个都是为特定目的而设计的。

使用第一个函数创建一个 period class 对象。这种class如果设计用来表示时间,比如比赛时间,或者"how many hours Bolt runs 100 meters?"0小时0分9秒58等等。

参见:

a <- hm(times)
class(a)
[1] "Period"
attr(,"package")
[1] "lubridate"

函数ymd_hm的第二个对象创建class的对象:

b <- ymd_hm(paste("01-01-01", times))
class(b)
[1] "POSIXct" "POSIXt" 

这个 class 对象旨在代表公历(或其他类型的日历)意义上的 "time"。它也解析 AM/PM 这对于区分 12 小时制中一天中的几个小时至关重要。