2012-03-01 190 views
8

在我的機器上,sqldf將本地時間(我在CST,GMT -0600)的POSIXct更改爲GMT/UTC。這是預期的行爲?我可以停止R或sqldf嗎?這裏是我的代碼:sqldf:將本地時間到GMT/UTC的時間戳更改爲

> 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 
> 

回答

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"

+0

謝謝你的加入例子!來自http源的補丁工作,我會用它。第二個確實轉換爲原始數據,但原始數據仍然轉換爲重新轉換爲POSIXct時的格林威治標準時間。再次感謝,馬特。 – mpettis 2012-03-02 02:31:23

+0

建議您檢查如何將其轉換回來。正如你從我添加到答案的代碼中可以看到的,它給出了相同的數字。 – 2012-03-02 04:20:43