我在R中使用
ROracle来访问Oracle数据库.
我注意到,自夏天时间更改以来,任何DATE(日期时间)Oracle列现在都被错误地转换(我在R中得到的时间比在Oracle DB中少一个小时).
从vignette的第12页(我很难理解)看起来像ROracle和R交换日期时间是自1-1-1970 UTC以来的秒数,并且R随后调整为当地时区.
这就是我的工作
drv <- dbDriver("Oracle"); con <- dbConnect(drv,username = Login,password = Pwd,dbname = DB,prefetch=TRUE,bulk_read=1e6); test.query <- "SELECT * FROM MYTABLE WHERE ( A > to_date('2008-03-03 12:30:00','YYYY-MM-DD HH24:MI:SS') AND A < to_date('2008-03-03 12:40:00','YYYY-MM-DD HH24:MI:SS') AND [other stuff])" test <- dbGetQuery(con,test.query); head(test[,c("A","B","C")]) # A B C #1 2008-03-03 11:30:38 2008-03-02 23:00:00 2008-03-02 23:00:00 #HERE IT SHOULD BE +1 HOUR #2 2008-03-03 11:30:38 2008-03-02 23:00:00 2008-03-02 23:00:00 #3 2008-03-03 11:30:41 2008-03-02 23:00:00 2008-03-02 23:00:00 #4 2008-03-03 11:31:25 2008-03-02 23:00:00 2008-03-02 23:00:00 #5 2008-03-03 11:31:25 2008-03-02 23:00:00 2008-03-02 23:00:00 #6 2008-03-03 11:31:34 2008-03-02 23:00:00 2008-03-02 23:00:00 class(test$A) [1] "POSIXct" "POSIXt" attributes(test$A) $class [1] "POSIXct" "POSIXt"
这是我的sessionInfo()
sessionInfo() R version 2.15.2 (2012-10-26) Platform: x86_64-w64-mingw32/x64 (64-bit) locale: [1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252 LC_MONETARY=French_France.1252 [4] LC_NUMERIC=C LC_TIME=French_France.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] data.table_1.8.9 ROracle_1.1-7 DBI_0.2-5 loaded via a namespace (and not attached): [1] tools_2.15.2
以下是我从管理员处获得的Oracle DB的信息
解决方法
这似乎在2014-11-20发布的
ROracle-1.1.12中得到修复.有关时区如何工作的信息,请参阅有关?dbReadTable的文档.