r - 将 lubridate 日期添加到矢量更改时区,从而更改日期

标签 r date lubridate

在 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/

相关文章:

r - 在 R 中按 NA 聚合

r - 尝试打开 RDS 文件时出现 No slot of name "images"错误

r - 编写强大的 R 代码 : namespaces, 屏蔽并使用 `::` 运算符

javascript - 年份小于零时的日期差

R:lubridate 返回 NA – 意外地

R 从今天的日期减去 1 个月给出 NA

r - createDataFrame 中的 SparkR 瓶颈?

c++ - C/C++ - 检查今天是否是本月的第一个星期一

sql - 创建一个字段来计算日期范围内一个月内的天数?

r - 在日期操作中避免舍入陷阱的最佳实践