2012-03-01 1 views
8

На моей машине sqldf меняет POSIXct с локального времени (я на CST, GMT -0600) на 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") 

EDIT: добавлен пример использования method = "raw"

+0

Спасибо! Патч от источника http работал, и я буду использовать его. Второй конвертировал в raw, но необработанный номер все еще преобразовывался в тот, который, когда он возвращался обратно в POSIXct, находился в GMT. Еще раз спасибо, Мэтт. – mpettis

+0

Предложите вам проверить, как вы его переделали. Как вы можете видеть из кода, который я добавил к ответу, он возвращает идентичные числа. –