更改R中的时区,但不返回原始时区

时间:2018-09-25 20:17:57

标签: r date timezone

我有一个日期和时间类似的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)

为什么会发生这种情况,如何维护所需的时区?

1 个答案:

答案 0 :(得分:1)

不幸的是,

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 package(v0.2.0)于2018-09-25创建。