2012-03-01 43 views
8

Trên máy của tôi, sqldf thay đổi POSIXct từ giờ địa phương (tôi đang ở CST, GMT -0600) thành GMT/UTC. Đây có phải là hành vi mong đợi không? Tôi có thể ngừng R hoặc sqldf làm việc này không? Đây là mã của tôi:sqldf: Thay đổi dấu thời gian từ giờ địa phương sang 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 
> 

Trả lời

3

Điều đó có vẻ là lỗi múi giờ trong sqldf. Nó cần được cố định hiện nay trong phiên bản sqldf 0,4-6,2 (chưa vào cran nhưng bạn có thể thử nó ra như thế này):

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 

Ngay cả khi không làm điều đó sqldf("select * from before", method = "raw") sẽ làm việc mặc dù điều đó sẽ trả về một cột số (mà bạn có thể chuyển đổi sang POSIXct) và có thể ảnh hưởng đến các cột khác. Dưới đây là ví dụ về việc sử dụng method = "raw". Lưu ý rằng trong cả hai trường hợp chúng tôi nhận 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: thêm ví dụ về sử dụng method = "raw"

+0

Cảm ơn! Bản vá từ nguồn http đã làm việc và tôi sẽ sử dụng nó. Người thứ hai đã chuyển đổi thành thô, nhưng số nguyên vẫn được chuyển đổi thành số đó, khi quay lại POSIXct, vào giờ GMT. Cảm ơn một lần nữa, Matt. – mpettis

+0

Đề nghị bạn kiểm tra cách bạn chuyển đổi nó trở lại. Như bạn có thể thấy từ mã tôi đã thêm vào câu trả lời, nó cung cấp các số giống hệt nhau. –

Các vấn đề liên quan