Đ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"
Nguồn
2012-03-02 01:19:01
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
Đề 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. –