将日期转换为POSIXct

20
为什么将下面的日期转换成 POSIXct 格式后,会变成 "2014-07-07"?
Sys.setenv(TZ='America/Sao_Paulo')
d <- as.Date("2014-07-08", format="%Y-%m-%d")
d
[1] "2014-07-08"
as.POSIXct(d)
[1] "2014-07-07 21:00:00 BRT"

这是否与时区有关?如果在调用as.POSIXct(d, tz = "...")时提供一个特定的时区会怎样呢? - talat
@beginneR 我想知道发生这种情况的原因,我已经有了一个解决方法。 - Carlos Cinelli
可能是因为这个原因(来自?as.POSIXct):“没有时间的日期被视为在UTC午夜。” - talat
2
什么是格式? :) - Joshua Ulrich
1个回答

24

由于as.POSIXct.Date不会查找时区(如果您在...中指定时区,也不会将其传递给.POSIXct),而日期对象是“UTC”,因此您的POSIXct偏移了Date对象的UTC。

如果可能的话,最好直接调用字符字符串上的as.POSIXct

> as.POSIXct("2014-07-08", format="%Y-%m-%d")
[1] "2014-07-08 BRT"

6
将日期转换为character类型:as.POSIXct(format(d)) - GSee
谢谢,乔舒亚。这很奇怪,有一个 (...) 参数,但它没有传递给 .POSIXct,通过传递一个简单的时区参数可以解决这个问题:.POSIXct(unclass(d) * 86400, tz="UTC") - Carlos Cinelli
1
@CarlosCinelli:我不确定这是否解决了问题,因为那是UTC午夜,而不是当地时间的午夜。 - Joshua Ulrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接