as.POSIXct中的奇怪行为:日期更改

时间:2013-07-09 13:02:01

标签: r date time

这不是一个错误吗?

as.POSIXct(as.Date("2013/01/01"))

结果:

[1] "2012-12-31 19:00:00 EST"

1 个答案:

答案 0 :(得分:4)

它调用as.POSIXct.Date方法,即

function (x, ...) 
.POSIXct(unclass(x) * 86400)

请注意,虽然它有这样的参数,但不可能将时区传递给.POSIXct

function (xx, tz = NULL) 
structure(xx, class = c("POSIXct", "POSIXt"), tzone = tz)

所以这发生了:

structure(unclass(as.Date("2013/01/01")) * 86400, 
          class = c("POSIXct", "POSIXt"), tzone = "EST")
#[1] "2012-12-31 19:00:00 EST"

如果要转换Date s:

,请解决此问题
structure(unclass(as.Date("2013/01/01")) * 86400, 
          class = c("POSIXct", "POSIXt"), tzone = "GMT")
#"2013-01-01 GMT"

或将as.POSIXct.Date修改为

function (x, tz=NULL,...)  .POSIXct(unclass(x) * 86400, tz = tz)