插入后,选择查询后,Java日期长值发生了变化

时间:2012-10-11 15:27:17

标签: java oracle jdbc timezone

AFAIK,java日期类型独立于时区,这意味着它将特定时刻表示为长类型值。我发现这里真的很奇怪。

这是我试图插入的原始值。

(http-0.0.0.0-9080-4)1352955600000< - 长整数。

(http-0.0.0.0-9080-4)2012年11月15日00:00:00美国东部时间< - 用户友好格式。

完成插入Oracle 11g数据库后,值已更改!

(http-0.0.0.0-9080-4)1352952000000

(http-0.0.0.0-9080-4)2012年11月14日星期三23:00:00

怎么会发生这种情况?更奇怪的是它只发生在特定的环境中,比如Jboss。 我目前正在使用以下环境。

  • java 1.6
  • ibatis 2.34
  • jboss-5.1(服务器)
  • tomcat 6.0(本地)
  • oracle 11g

有没有人可以给我一些线索或链接来提供帮助? 它真的让我烦恼!!


我在这里添加了更多信息。 我在java中使用Date类型,在oracle中使用TIMESTAMP WITH TIMEZONE。

我在日期存储了价值(" 11/15/2012",MM / dd / yyyy,US / Eastern)。

并使用iBatis将此值发送给Oracle。它显示为

12/11/15 00:00:00.000000000 -04:00

这是不正确的。它的时区应该是-05:00,因为DST将在11月结束。

而且,当我从我的java代码中获取此值时,

它返回 2012年11月14日星期三23:00:00美国东部时间,我预计 2012年11月15日星期六00:00:00

解决了问题。

谢谢伙计们。我找到了原因。它是ojdbc驱动程序的已知错误。 请参阅此link

1 个答案:

答案 0 :(得分:0)

已知ojdbc的bug。 升级库后,问题从未发生过。

参考此

https://forums.oracle.com/thread/356702