使用ROracle在R中从Oracle查询中获取正确的日期时间

9
我正在使用R中的ROracle来访问Oracle数据库。
我注意到自夏令时更改以来,任何 DATE (日期时间)Oracle列都被错误转换了(在R中,我得到比Oracle DB少一个小时的结果)。
vignette第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小时,然后在夏末时需要把它减回去)?

我没有解决方案,但我对可能的答案很感兴趣,因为我遇到了完全相同的问题(在R 3.0.0、OS X和时区跨越半个地球的情况下,可能)。 - joran
你的问题和ROracle有关吗? - statquant
是的,完全相同的事情,日期时间差了一个小时。使用RODBC连接到相同的数据库不会显示这个问题。 - joran
我认为这很可能是问题所在,使用另一个客户端(和SAS),我也没有遇到这个问题。我联系了软件包的作者/维护者... - statquant
嗨,我遇到了同样的问题。这里有人解决或理解了这个问题吗? - David Gohel
显示剩余4条评论
2个回答

14

谢谢。这是正确的答案,因为时区转换问题在ROracle方面没有改变。将这两个环境变量都设置为“UTC”解决了我的问题。 - icj
这个答案对我也起作用了。感谢你的回答和文档。 - Seanosapien

-2

这个问题似乎在2014年11月20日发布的ROracle-1.1.12中得到了解决。请参阅?dbReadTable文档,了解时区的工作方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接