2013-04-12 46 views
4

我在R內使用ROracle訪問Oracle數據庫。通過Oracle中的ROracle獲取正確的日期時間R

我注意到,可能自夏令時改變以來,任何DATE(日期時間)Oracle列現在都被錯誤地轉換(我在R中得到的時間比Oracle數據庫少一小時)。

vignette我bearly瞭解)第12頁,它看起來像ROracle和R交換日期時間爲1970年1月1日以來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數據庫的信息,我從管理得到 Oracle DB

我能做正確的解決這個問題(不只是增加1小時,我將不得不在夏季結束時收回)

+0

我沒有解決方案之前,但我很好奇可能的答案,因爲我遇到了完全相同的問題(可能是R 3.0.0,OS X和全球一半的時區)。 – joran

+0

你的問題與ROracle有關嗎? – statquant

+0

是的;完全一樣的東西,日期時間是一個小時。使用RODBC連接到相同的數據庫不會顯示問題。 – joran

回答

1

這似乎是在2014年11月20日發佈的ROracle-1.1.12中修復的。有關時區如何工作,請參閱?dbReadTable上的文檔。