将POSIXct向量转换为日期格式会在R中添加一天(9/30变为10/1)

时间:2014-02-07 18:11:41

标签: r type-conversion posixct

我在使用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。关于可能发生的事情的任何想法?

1 个答案:

答案 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!