首页 > 解决方案 > 更改 R 中的时区而不返回原始时区

问题描述

我有一个日期和时间如下的df:

df <- data.frame(c("2018-09-28 00:00:00Z","2018-09-29 01:00:00Z","2018-09-30 10:00:00Z"))
names(df) <- "startTime"

日期和时间在 UTC 时区,所以我的格式如下:

df$startTime <- as.POSIXct(df$startTime, tz="Etc/UTC")

然后我想把它们放在纽约时间,像这样:

attributes(df$startTime)$tzone <- "America/New_York"

现在我想使用 as.Date 提取日期。不幸的是,下面的代码将日期返回到 UTC 时区。请注意,当您运行下面的代码时,纽约时间午夜之前的日期如何更改为午夜之后的 UTC 时间日期。

df$startTime <- as.Date(df$startTime)

为什么会发生这种情况,我怎样才能保持我想要的时区?

标签: rdatetimezone

解决方案


as.Date不幸的是,如文档中所述,默认为 UTC,因此您可以手动指定时区以使其正常工作。或者,您可以使用更擅长遵守时区的date()提取器lubridate

df <- data.frame(c("2018-09-28 00:00:00Z","2018-09-29 01:00:00Z","2018-09-30 10:00:00Z"))
names(df) <- "startTime"
df$startTime <- as.POSIXct(df$startTime, tz="Etc/UTC")
attributes(df$startTime)$tzone <- "America/New_York"

as.Date(df$startTime, tz="America/New_York")
#> [1] "2018-09-27" "2018-09-28" "2018-09-30"
lubridate::date(df$startTime)
#> [1] "2018-09-27" "2018-09-28" "2018-09-30"

reprex 包(v0.2.0)于 2018 年 9 月 25 日创建。


推荐阅读