我有一个日期和时间类似的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)
为什么会发生这种情况,如何维护所需的时区?
答案 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创建。