gpt4 book ai didi

r - 使用 format.Posix* 在 R 中使用时区格式化 Sys.time() 的输出

转载 作者:行者123 更新时间:2023-12-05 03:08:25 25 4
gpt4 key购买 nike

我想弄清楚如何在 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/斯德哥尔摩”

还有

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/斯德哥尔摩”?

最佳答案

尽管 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"

关于r - 使用 format.Posix* 在 R 中使用时区格式化 Sys.time() 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45331694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com