gpt4 book ai didi

r - POSIXct 原点基类型导致时区差异

转载 作者:行者123 更新时间:2023-12-04 10:10:32 28 4
gpt4 key购买 nike

我在 R 中使用 POSIXct 管理时区时遇到问题。我设置了 TZ全局选项为 "Europe/London"但自从我们切换回格林威治标准时间以来,已经运行 as.POSIXct不再将数字向量转换回正确的时间。

深入研究为什么我发现时区差异可能是由用于设置原始日期的对象类型引起的。

例如:

# Date time is set as 1 second after 1970-01-01
as.POSIXct(1, origin = "1970-01-01")
# [1] "1970-01-01 01:00:01 BST"

# Same numeric value, but one hour less now that the origin is set using a POSIXct
as.POSIXct(1, origin = as.POSIXct("1970-01-01"))
# [1] "1970-01-01 00:00:01 BST"

考虑到查询是在英国夏令时之外进行的,第一个值实际上没有意义,但这些值是在格林威治标准时间进行的(请参见下面的结果):
Sys.timezone()
# [1] "Europe/London"

Sys.time()
# [1] "2018-10-31 11:05:36 GMT"

即使您在每个阶段明确说明时区,小时差仍然存在:
as.POSIXct(1, origin = "1970-01-01", tz = "Europe/London")
# [1] "1970-01-01 01:00:01 BST"

as.POSIXct(1, origin = as.POSIXct("1970-01-01", tz = "Europe/London"), "Europe/London")
# [1] "1970-01-01 00:00:01 BST"

更糟糕的是,由 ?as.POSIXct 产生的文档关于时区的管理非常模糊,特别是:

If a time zone is needed and that specified is invalid on your system, what happens is system-specific but attempts to set it will probably be ignored.



鉴于此,我有一系列问题:

1) 为什么 as.POSIXct(1, origin = "1970-01-01", tz = "Europe/London")加一个小时?即使原始日期将被解析为 GMT 时间并且时区已明确设置。

2)从 R 中的数字转换时,确保 R 中的时区一致的最佳方法是什么?

3) 在 R 中管理时区的最佳实践是什么?有没有好的引用,特别是 POSIXct日期类型。

最佳答案

对于问题 1,您在这里有点历史。请参阅下面所有 BST、GMT 和 UTC 的结果。 UTC 和 GMT 应该(并且是)相同。
现在,你为什么用第一行代码得到 BST?

那是因为在 1970 年,英国整年都在使用 BST。实际上,英国从 1968-02-18 到 1971-10-31 都在使用 BST。这意味着当您提供“欧洲/伦敦”的时区时,通过返回“1970-01-01 01:00:01 BST”,R 是正确的。有关更多信息,请参阅 this wikipedia page .

次数:

as.POSIXct(1, origin = "1970-01-01", tz = "Europe/London")
[1] "1970-01-01 01:00:01 BST"
as.POSIXct(1, origin = "1970-01-01", tz = "GMT")
[1] "1970-01-01 00:00:01 GMT"
as.POSIXct(1, origin = "1970-01-01", tz = "UTC")
[1] "1970-01-01 00:00:01 UTC"

Q2:首先你需要知道日期来自哪个时区。然后要么继续在该时区工作,要么将时区更改为您本地的时区。或者剥离日期时间对象的时区,这将强制所有内容为 UTC。

我会说 lubridate 的 force_tzwith_tz功能强制时区。但是由于您不想要 lubridate,请将您的本地时区设置为您需要的任何内容。我倾向于使用 Sys.setenv(TZ = "UTC")如果我正在处理股票数据,那么当我有不同的本地时间时,xts 对象不会提示。

Q3:这里有一点来自 R for Data Science
这是一个 SO post on time zones

关于r - POSIXct 原点基类型导致时区差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53082219/

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