r - 更改 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)
为什么会发生这种情况,我怎样才能保持我想要的时区?
解决方案
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 日创建。
推荐阅读
- php - mPDF:像打印预览一样生成 PDF
- r - 计数 | 数据框中的每列
- ios - TabBar / CollectionView 崩溃
- mockito - 我可以操纵模拟匹配器的顺序吗?
- php - 从 python 3 下载直接 .7z 文件已损坏
- swift - tableView 不显示数据值
- mysql - NOT EXIST 和 NOT IN 有什么区别?
- knitr - 如何在 knitr 中使用不同的“dev.off()”(自动裁剪图形)
- youtube-api - YouTube API 过滤器发布后不起作用
- python-3.x - 从 boto3 table.batch_writer 对象获取 Http 响应