在 R 包 lubridate 中,我可以使用以下语法轻松创建日期:
> mdy("5/4/2015")
正如预期的那样,它产生以下结果:
[1] "2015-05-04 UTC"
但是,如果我尝试将该值添加到数组中,它似乎会从 UTC 更改为我的本地时间 (EDT):
> c(mdy("5/4/2015"))
[1] "2015-05-03 20:00:00 EDT"
由于我不关心时间,这不会对我产生太大影响,只是这会导致日期向后移动 1,如下所示:
> day(mdy("5/4/2015"))
[1] 4
> day(c(mdy("5/4/2015")))
[1] 3
对我来说,向数组添加一些东西的行为不应该改变那个东西的值(value)。我在这里遗漏了什么,有没有办法解决这个问题?
最佳答案
那是因为 lubridate::mdy
假设 UTC
.当你把它包裹起来时 c()
,它会恢复到您的本地时区 EDT
因为 c()
不传timezone
属性:
> attr(mdy("5/4/2015", tz = "EDT"), "tzone")
# [1] "EDT"
> attr(c(mdy("5/4/2015", tz = "EDT")), "tzone")
# NULL
你可以做:
Sys.setenv(TZ = "UTC")
将本地时区设置为
UTC
.或者,您可以在
mdy()
中明确指定时区:mdy("5/4/2015", tz = "UTC")
关于r - 将 lubridate 日期添加到矢量更改时区,从而更改日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30042925/