gpt4 book ai didi

r - 防止意外的时区转换

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

在 R 中,我有一堆在 GMT 中测量的日期时间值。我不断遇到某些函数或其他函数丢失我的值的时区,甚至丢失类名的事故。即使是像 c() 这样基本的功能和 unlist() :

> dput(x)
structure(1317830532, class = c("POSIXct", "POSIXt"), tzone = "GMT")
> dput(c(x))
structure(1317830532, class = c("POSIXct", "POSIXt"))
> dput(list(x))
list(structure(1317830532, class = c("POSIXct", "POSIXt"), tzone = "GMT"))
> dput(unlist(list(x)))
1317830532

我觉得我与真正的人相差甚远 Mars Climate Orbiter如果这发生在我最不期望的时刻。任何人都有确保他们的日期“原地踏步”的策略吗?

最佳答案

此行为记录在 ?c 中, ?DateTimeClasses?unlist :

来自 ?DateTimeClasses :

Using c on "POSIXlt" objects converts them to the current time zone, and on "POSIXct" objects drops any "tzone" attributes (even if they are all marked with the same time zone).*



来自 ?c :

c is sometimes used for its side effect of removing attributes except names.*



也就是说,我的测试表明,尽管使用了 c,您的数据的完整性仍然完好无损。或 unlist .例如:
x <- structure(1317830532, class = c("POSIXct", "POSIXt"), 
tzone = "GMT")
y <- structure(1317830532+3600, class = c("POSIXct", "POSIXt"),
tzone = "PST8PDT")
x
[1] "2011-10-05 16:02:12 GMT"

y
[1] "2011-10-05 10:02:12 PDT"

strftime(c(x, y), format="%Y/%m/%d %H:%M:%S", tz="GMT")
[1] "2011/10/05 16:02:12" "2011/10/05 17:02:12"

strftime(c(x, y), format="%Y/%m/%d %H:%M:%S", tz="PST8PDT")
[1] "2011/10/05 09:02:12" "2011/10/05 10:02:12"

strftime(unlist(y), format="%Y/%m/%d %H:%M:%S", tz="PST8PDT")
[1] "2011/10/05 10:02:12"

如果您使用 R 来跟踪日期,您的火星探测器应该没问题。

关于r - 防止意外的时区转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7665605/

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