AFAIK,java Date 类型独立于 Timezone,这意味着它表示特定的时间时刻作为 long 类型的值。我在这里发现了非常奇怪的事情。
这是我尝试插入的原始值。
(http-0.0.0.0-9080-4) 1352955600000 <-- 长整数。
(http-0.0.0.0-9080-4) Thu Nov 15 00:00:00 EST 2012 <-- 用户友好格式。
在我完成插入 Oracle 11g 数据库后,值发生了变化!
(http-0.0.0.0-9080-4) 1352952000000
(http-0.0.0.0-9080-4) 2012 年 11 月 14 日星期三 23:00:00 EST
怎么会这样??更奇怪的是它只发生在特定的环境中,比如 Jboss。我目前正在使用以下环境。
- 爪哇 1.6
- 巴蒂斯 2.34
- jboss-5.1(服务器)
- Tomcat 6.0(本地)
- 甲骨文 11g
有没有人可以给我一个线索或链接以提供帮助?它真的让我烦恼!
我在这里添加更多信息。我在 java 中使用 Date 类型,在 oracle 中使用 TIMESTAMP WITH TIMEZONE。
我在日期中存储了值(“11/15/2012”,MM/dd/yyyy,美国/东部)。
并使用 iBatis 将此值发送给 Oracle。它显示为
2015 年 12 月 11 日 00:00:00.000000000 -04:00
这是不正确的。它的时区应该是 -05:00,因为 DST 将在 11 月结束。
而且,当我从我的 java 代码中得到这个值时,
它返回 Wed Nov 14 23:00:00 EST 2012,我预计是Thu Nov 15 00:00:00 EST 2012。
问题解决了。
谢谢各位。我找到了原因。这是 ojdbc 驱动程序的已知错误。请参考此链接。