【发布时间】:2013-04-05 04:54:28
【问题描述】:
我在 R 中使用 ROracle 来访问 Oracle 数据库。
我注意到,可能自夏季时间更改以来,任何 DATE(日期时间)Oracle 列现在都被错误地转换(我在 R 中得到的时间比在 Oracle DB 中少一个小时)。
从vignette 的第 12 页(我几乎不明白)看起来 ROracle 和 R 将日期时间交换为自 1970 年 1 月 1 日以来的秒数,并且 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 的信息
我能做些什么来正确解决这个问题(不仅仅是增加 1 小时,我必须在夏末收回)
【问题讨论】:
-
我没有解决方案,但我对可能的答案很好奇,因为我遇到了完全相同的问题(在 R 3.0.0、OS X 和跨时区的中途)世界,大概)。
-
您的问题出在 ROracle 上?
-
是的;完全相同的事情,日期时间是一个小时。使用 RODBC 连接到同一个数据库不会显示问题。
-
哦,所以可能是 Roracle 本身的问题?
-
到目前为止,这是我的工作假设,是的,但我不确定。