以 YYYY-MM-DDTHH-MM-SSZ 格式解析 ISO 8601 日期时间

chw*_*wil 2 datetime r posixct

我有一个带有时间戳的大型数据框,如下所示:

"2019-05-15T01:42:15.072Z"
Run Code Online (Sandbox Code Playgroud)

它类似于ISO 8601 组合的日期和时间表示形式

如何将此字符串解析为真正的日期时间格式?

数据中的字符 (T和) 似乎使其变得困难。Z

Mau*_*ers 6

as.POSIXct您可以通过在(或strptime)中指定格式来简单地解析时间戳

as.POSIXct("2019-05-15T01:42:15.072Z", format = "%Y-%m-%dT%H:%M:%OSZ", tz = "UTC")
#[1] "2019-05-15 01:42:15 UTC"
Run Code Online (Sandbox Code Playgroud)

解释:

%Y%m%d表示年(带有世纪)、月和日;%H%M%OS表示小时、分钟和秒(包括毫秒)。和只是添加到字符串中T,因为Zformat

格式字符串中不属于转换规范的任何字符均按字面解释

?strptime参阅 不同的转换规范。

对时区的评论

由于Z表示 UTC 时间,我们已手动添加tz = "UTC"as.POSIXct如 @BennyJobigan 所指出的)。如果您希望将时间戳转换为本地(目标)时区,您可以这样做

as.POSIXct("2019-05-15T01:42:15.072Z", format = "%Y-%m-%dT%H:%M:%OSZ", tz = "UTC")
#[1] "2019-05-15 01:42:15 UTC"
Run Code Online (Sandbox Code Playgroud)

(显然,输出取决于您当地的时区,并且可能与我得到的不同。)