我想弄清楚如何格式化R中的Sys.time()
输出。
例如:
t <- Sys.time()
print(t)
# [1] "2017-07-26 09:41:29 CEST"
这是正确的。
我想用t
制作一个由日期,小时和分钟以及时区组成的字符串。
我可以用
format(t, format = "%F %R %Z")
# [1] "2017-07-26 09:41 CEST"
这是我的期望。
但是,如果我明确设置时区,我很难理解输出。例如:
format(t, format = "%F %R %Z", tz = "Europe/Stockholm")
# [1] "2017-07-26 09:41 CEST"
产生我所期望的,但是:
format(t, format = "%F %R %Z", tz = "CEST")
# [1] "2017-07-26 07:41 CEST"
我认为这是错误的,我希望输出为"2017-07-26 09:41 CEST"
或"2017-07-26 09:41 Europe/Stockholm"
另外
format(t, format = "%F %R %Z", tz = "UTC+02:00")
# [1] "2017-07-26 05:41 UTC"
我发现甚至更奇怪,因为我希望输出为"2017-07-26 10:41 UTC+02:00"
在答案中,我想知道两件事:
"2017-07-26 10:41 UTC+02:00"
或"2017-07-26 10:41 Europe/Stockholm"
?答案 0 :(得分:1)
即使R在控制台中将时区显示为"CEST"
(%Z
),也没有该名称的有效时区。您可以查看OlsonNames()
以获取有效的时区名称。
any(grepl("CEST", OlsonNames()))
#[1] FALSE
对于时区显示为CEST
的情况,它仍然在内部存储为"Europe/Stockholm"
。我们可以使用dput
as.POSIXct("2017-07-26 10:46:12", tz = "Europe/Stockholm")
#[1] "2017-07-26 10:46:12 CEST"
dput(as.POSIXct("2017-07-26 10:46:12", tz = "Europe/Stockholm"))
#structure(1501058772, class = c("POSIXct", "POSIXt"), tzone = "Europe/Stockholm")
请注意%Z
仅用于输出,并且输入不可靠。 CEST
不是tz
的有效值,如果您对tz
使用无效值,则通常将其视为UTC
(请参阅?format.POSIXct
或?strptime
)。这就是您使用format(t, format = "%F %R %Z", tz = "CEST")
明确使用"Europe/Stockholm"
。
any(grepl("Europe/Stockholm", OlsonNames()))
#[1] TRUE
对于特定格式的格式化时间,请尝试
format(as.POSIXct("2017-07-26 10:46:12", tz = "UTC"), "%F %R UTC%z")
#[1] "2017-07-26 10:46 UTC+0000"