从POSIXct到R的日期转换

lok*_*art 31 datetime r

任何人都可以告诉我为什么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"
Run Code Online (Sandbox Code Playgroud)

不应该2013-01-01在转换POSIXctDatefor之后2013-01-01 07:00,有没有办法将截止值08:00改为00:00

更新#1

我发现以下内容可以解决我的问题,但是不太整齐

> as.Date(as.character(as.POSIXct("2013-01-01 07:00")))
[1] "2013-01-01"
Run Code Online (Sandbox Code Playgroud)

ale*_*han 35

这里的问题是时区 - 你可以看到你在"HKT".尝试:

as.Date(as.POSIXct("2013-01-01 07:00", 'GMT'))
[1] "2013-01-01"
Run Code Online (Sandbox Code Playgroud)

来自?as.Date():

[" POSIXct"]通过忽略指定时区(默认UTC)中时间表示中午夜之后的时间转换为天数


Rol*_*and 23

使用时区参数as.Date:

as.Date(as.POSIXct("2013-01-01 07:00",tz="Hongkong"))
#[1] "2012-12-31"

as.Date(as.POSIXct("2013-01-01 07:00",tz="Hongkong"),tz="Hongkong")
#[1] "2013-01-01"
Run Code Online (Sandbox Code Playgroud)

实际上,我建议tz在使用日期时转换功能时始终使用该参数.还有其他令人讨厌的惊喜,例如夏令时.

  • 这是最好的答案(并且应该得到绿色勾号),因为它对于在日期中应用的tz参数(不是"as.POSIXct")更加彻底和精确,而不是OP的绿色勾选答案. (3认同)
  • 值得一提的是在提到夏令时之后,有时您需要放入tz =“”以使其正常工作。我真的不知道为什么,我不惜一切代价避免使用“ POSIXct”。 (2认同)