R:ISO 8601将UTC转换为ISO 8601.为什么会增加一小时?

时间:2018-01-11 13:38:39

标签: r datetime time utc iso

所以我希望将一些ISO 8601时间转换为R中的UTC格式。例如:

library("lubridate")

x <- "2010-04-14-01-00-00-UTC"

datetime <- lubridate::ymd_hms(x)

datetime
[1] "2010-04-14 01:00:00 UTC"

strftime(datetime, "%Y-%m-%dT%H:%M:%SZ")
[1] "2010-04-14T02:00:00Z"

然而,在ISO 8601中,“Z”表示UTC时间,因此我预期“2010-04-14T01:00:00Z”,但是在日期时间上添加了一个小时。为什么?我想念一些东西吗?

R在两者之间转换的正确方法是什么?并向后转换?

1 个答案:

答案 0 :(得分:0)

来自文档:

  

strftime(x, format = "", tz = "", usetz = FALSE, ...)

     

[...]

     

tz一个字符串,指定用于的时区   转换。特定于系统(参见as.POSIXlt),但&#34;&#34;是目前的   时区和&#34; GMT&#34;是UTC。最常处理无效值   作为UTC,在某些带有警告的平台上。

因此,您需要指定正确的时区:

strftime(datetime, "%Y-%m-%dT%H:%M:%SZ", tz = "UTC")
#[1] "2010-04-14T01:00:00Z"

否则需要系统区域设置的时区:

strftime(datetime, "%Y-%m-%dT%H:%M:%S", usetz = TRUE)
#[1] "2010-04-14T03:00:00 CEST"