2012-03-01 9 views
8

En mi máquina, sqldf cambia un POSIXct del horario local (estoy en CST, GMT -0600) a GMT/UTC. ¿Es este comportamiento esperado? ¿Puedo evitar que R o sqldf hagan esto? Aquí está mi código:sqldf: Cambia la marca de tiempo del horario local a 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 
> 

Respuesta

3

Parece ser un error de zona horaria en sqldf. Se debe fijarse ahora en la versión sqldf 0,4-6,2 (todavía no en CRAN pero se puede probar que fuera así):

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 

Incluso sin hacer eso sqldf("select * from before", method = "raw") funcionará a pesar de que devolverá una columna numérica (que se puede convertir a POSIXct) y puede afectar otras columnas también. Aquí hay un ejemplo del uso de method = "raw". Nótese que en ambos casos obtenemos 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") 

EDIT: ejemplo adicional del uso de method = "raw"

+0

Gracias! El parche de la fuente http funcionó, y lo usaré. El segundo se convirtió a crudo, pero el número sin procesar se transformó en uno que, cuando se refundió en POSIXct, estaba en GMT. Gracias de nuevo, Matt. – mpettis

+0

Le sugerimos que compruebe cómo lo convirtió de nuevo. Como puede ver en el código que agregué a la respuesta, devuelve números idénticos. –

Cuestiones relacionadas