我在使用as.Date将POSIXct矢量转换为Date格式时遇到问题,似乎将2013-09-30翻译为2013-10-01,见下文:
> test$Submit
[1] "2013-09-30 22:40:24 EST" "2013-09-30 21:07:40 EST" "2013-09-30 19:17:23 EST"
[4] "2013-09-30 19:28:30 EST" "2013-09-30 23:55:25 EST" "2013-09-30 19:19:26 EST"
[7] "2013-09-30 19:31:57 EST" "2013-09-30 19:38:55 EST" "2013-09-30 19:52:48 EST"
[10] "2013-09-30 19:57:34 EST" "2013-09-30 20:19:12 EST" "2013-09-30 23:59:24 EST"
[13] "2013-09-30 19:38:23 EST" "2013-09-30 20:27:34 EST" "2013-09-30 22:35:00 EST"
[16] "2013-09-30 22:37:48 EST" "2013-09-30 22:47:50 EST" "2013-09-30 23:06:07 EST"
> str(test$Submit)
POSIXct[1:18], format: "2013-09-30 22:40:24" "2013-09-30 21:07:40" "2013-09-30 19:17:23" ...
> as.Date(test$Submit)
[1] "2013-10-01" "2013-10-01" "2013-10-01" "2013-10-01" "2013-10-01" "2013-10-01"
[7] "2013-10-01" "2013-10-01" "2013-10-01" "2013-10-01" "2013-10-01" "2013-10-01"
[13] "2013-10-01" "2013-10-01" "2013-10-01" "2013-10-01" "2013-10-01" "2013-10-01"
另外,我的Sys.time()显示我在EST。关于可能发生的事情的任何想法?
答案 0 :(得分:4)
尝试在as.Date中设置时区:
> dt <- as.POSIXct("2013-09-30 22:40:24 EST")
> dt
[1] "2013-09-30 22:40:24 EDT"
> as.Date(dt)
[1] "2013-10-01"
> as.Date(dt, tz="EST")
[1] "2013-09-30"
编辑:我即将发布罗兰评论的内容,你可以通过查看属性来看到它:
> attributes(dt)
$class
[1] "POSIXct" "POSIXt"
$tzone
[1] ""
所以,即使你认为你正在设置EST的东西,你也不是。默认值实际上是tz=""
的本地时间(as.POSIXct
):
用于转换的时区规范(如果需要)。系统特定(参见时区),但“”是当前时区,“GMT”是UTC(世界时,协调)。
但是对于as.Date.POSIXct
,默认为UTC!