谁能告诉我为什么R给予这样的结果如下:
> as.POSIXct("2013-01-01 08:00")
[1] "2013-01-01 08:00:00 HKT"
> as.Date(as.POSIXct("2013-01-01 08:00"))
[1] "2013-01-01"
> as.POSIXct("2013-01-01 07:00")
[1] "2013-01-01 07:00:00 HKT"
> as.Date(as.POSIXct("2013-01-01 07:00"))
[1] "2012-12-31"
在将POSIXct
转换为2013-01-01 07:00
的Date
之后,它不应该是2013-01-01
吗?有没有办法将截止值从08:00
更改为00:00
?
更新#1
我发现下面的方法可以解决我的问题,但方法不那么简洁
> as.Date(as.character(as.POSIXct("2013-01-01 07:00")))
[1] "2013-01-01"
3条答案
按热度按时间brccelvz1#
这里的问题是时区-你可以看到你在
"HKT"
。从
?as.Date()
开始:[”
POSIXct
“]通过忽略指定时区(默认为UTC)时间表示中午夜之后的时间,转换为天数xmakbtuz2#
使用时区参数
as.Date
:实际上,我建议在使用日期-时间转换函数时总是使用
tz
参数,还有其他令人讨厌的意外,例如夏令时。piv4azn73#
当同期UTC时间早于(您的第三个示例)或在POSIX日期的午夜之后。要亲自查看数学,请在控制台检查
as.Date.POSIXct
。默认tz="UTC"
下的数学是清楚的。在非默认情况下,R实际上调用as.Date.POSIXlt
,并且date-travel
不会发生。实际上,如果你从lt
对象开始你就不会有这个问题:最简单的解决方法是使用
tz=""
调用as.Date,以强制使用不太麻烦的as.Date.POSIXlt
算法: