以AM / PM格式解析日期时间

时间:2018-08-23 08:51:31

标签: r

我正在尝试在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 个答案:

答案 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"