我正在尝试在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
我想念什么?
答案 0 :(得分:1)
它被认为是1 AM而不是1 PM,因此输出为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"