sqldf:将时间戳从本地时间更改为GMT/UTC

9

在我的电脑上,sqldf将POSIXct从本地时间(我在CST,GMT -0600)更改为GMT / UTC。这是预期的行为吗?我能停止R或sqldf这样做吗?这是我的代码:

> library('sqldf')
> 
> before <- data.frame(ct_sys = Sys.time())
> before
               ct_sys
1 2012-03-01 12:57:58
> after <- sqldf('select * from before')
> after
               ct_sys
1 2012-03-01 18:57:58
> 
1个回答

3

看起来这是sqldf中的一个时区错误。现在在sqldf版本0.4-6.2中已经修复(尚未发布到CRAN,但您可以像这样尝试它):

library(sqldf)
source("http://sqldf.googlecode.com/svn/trunk/R/sqldf.R")
before <- data.frame(ct_sys = Sys.time()); before
after <- sqldf('select * from before'); after

即使不这样做,sqldf("select * from before", method = "raw")也可以工作,尽管它会返回一个数字列(你可以将其转换为POSIXct),并可能影响其他列。以下是使用method="raw"的示例。请注意,在两种情况下,我们都得到了1330661786.181
> library(sqldf)
>
> before <- data.frame(ct_sys = Sys.time()); dput(before)
structure(list(ct_sys = structure(1330661786.181, class = c("POSIXct", 
"POSIXt"))), .Names = "ct_sys", row.names = c(NA, -1L), class = "data.frame")
>
> after <- sqldf('select * from before', method = "raw"); dput(after)
structure(list(ct_sys = 1330661786.181), .Names = "ct_sys", row.names = 1L, class = "data.frame")

编辑:添加了使用method = "raw"的示例


谢谢!来自http源的补丁起作用了,我会使用它。第二个确实转换成了原始格式,但是原始数字仍然被转换为一个,在重新转换为POSIXct时,是以GMT时间表示的。再次感谢,Matt。 - mpettis
建议您检查一下您转换回来的方式。就像您从我的答案中添加的代码所示,它可以还原出相同的数字。 - G. Grothendieck

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