我正在尝试在R中解析AM/PM格式的日期时间。我发现"%p"可以处理这个问题。但是,当我尝试这样做时:
mydate <- as.POSIXct("01.01.1970 01:00:00 PM", format="%d.%m.%Y %H:%M:%S %p", tz = "UTZ")
mydate
[1] "1970-01-01 01:00:00 UTZ"
> as.numeric(mydate)
[1] 3600
这显然是凌晨 1 点。我本来期望输出:
[1] "1970-01-01 13:00:00 UTZ"
[1] 46800
我错过了什么?
它被认为是凌晨 1 点而不是下午 1 点,因此您可以获得 3600 作为输出。
as.POSIXct("01.01.1970 01:00:00 PM", format="%d.%m.%Y %H:%M:%S %p", tz = "UTC")
#[1] "1970-01-01 01:00:00 UTC"
?strptime
的文件说
%p 区域设置中的 AM/PM 指示器。与 %I 一起使用,而不是与 %H 一起使用。某些区域设置中的空字符串(如果用于此类区域设置中的输入,则行为未定义(。
您需要使用%I
而不是%H
mydate <- as.POSIXct("01.01.1970 01:00:00 PM", format="%d.%m.%Y %I:%M:%S %p",
tz = "UTC")
as.numeric(mydate)
#[1] 46800
lubridate
的替代方案
library(lubridate)
seconds(mdy_hms("01.01.1970 01:00:00 PM"))
#[1] "46800S"