R内でROracleを使用してOracleデータベースにアクセスしています。
おそらく夏時間の変更以降、DATE
(datetime) Oracle 列が正しく変換されていないことに気付きました (R では Oracle DB よりも 1 時間少なくなります)。
ビネットの 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 DB に関する情報は次のとおりです。
この問題を正しく解決するにはどうすればよいですか (夏の終わりに取り戻さなければならない 1 時間を追加するだけではありません)。