首页 > 解决方案 > 以 AM/PM 格式解析日期时间

问题描述

我正在尝试在 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

我错过了什么?

标签: r

解决方案


它考虑为上午 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"

推荐阅读