【发布时间】:2021-09-26 05:15:10
【问题描述】:
我需要从datetime中获取日期,我用的是as.Date函数
2016-11-04 15:12:00 --- 2016-11-04 -- 正确
2018-03-17 19:18:00 --- 2018-03-18 -- false,应该是 2018-03-17
我注意到当时间大于“17:00”时,日期增加了 1 天。是什么原因?有没有更好的方法来获取正确的日期?
【问题讨论】:
我需要从datetime中获取日期,我用的是as.Date函数
2016-11-04 15:12:00 --- 2016-11-04 -- 正确
2018-03-17 19:18:00 --- 2018-03-18 -- false,应该是 2018-03-17
我注意到当时间大于“17:00”时,日期增加了 1 天。是什么原因?有没有更好的方法来获取正确的日期?
【问题讨论】:
R 日期时间存储为 UCT 时间。然后您会看到它们,即print 它们,其偏移量由您的系统时区确定。至少目前,您似乎与格林威治(或巴黎)相距 24-17 = 7 个时区。 (当您所在时区的 17:00 时,是巴黎的午夜。)在 DST 恢复到正常时间后,这可能会改变一个单位。 (这是 R 中时间混乱的另一个常见原因。)
太平洋时间下午 6:30:
tseq <- seq(Sys.time(), Sys.time()+24*60*60 , by="hour")
table(as.Date(tseq))
#-------------------------
2021-07-18 2021-07-19
23 2
【讨论】:
日期时间似乎存储在您的本地时区中,而 as.Date 默认使用 UTC 时区,因此您会看到提取日期的变化。
您需要将它们放在同一个时区。例如,在as.Date 中将tz 值指定为Sys.timezone(),您将获得与数据中显示的相同的日期。
as.Date(as.POSIXct(df$datetime), tz = Sys.timezone())
【讨论】: