2012-03-01 26 views
8

Na moim komputerze, sqldf zmienia POSIXct z localtime (jestem na CST, GMT -0600) na GMT/UTC. Czy to oczekiwane zachowanie? Czy mogę powstrzymać R lub sqldf przed zrobieniem tego? Oto mój kod:sqldf: Zmienia znacznik czasu z czasu lokalnego na 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 
> 

Odpowiedz

3

To wydaje się być błędem strefy czasowej w sqldf. Powinien on być naprawione w wersji 0.4-6.2 sqldf (jeszcze na CRAN ale można go wypróbować jak to):

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 

Nawet nie robiąc że sqldf("select * from before", method = "raw") będzie działać mimo, że powróci do kolumny numerycznej (które można przekonwertować do POSIXct) i może również wpływać na inne kolumny. Oto przykład użycia method = "raw". Należy zauważyć, że w obu przypadkach mamy 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: Dodano przykład użycia method = "raw"

+0

Dzięki! Łatka ze źródła http zadziałała i wykorzystam to. Drugi konwertował na surowy, ale nieprzetworzoną liczbę nadal przekształcano na taką, która po przejściu z powrotem do POSIXct była w GMT. Jeszcze raz dziękuję, Matt. – mpettis

+0

Sugerujemy sprawdzenie, w jaki sposób ją przekonwertowałeś. Jak widać z kodu, który dodałem do odpowiedzi, daje to identyczne numery. –

Powiązane problemy