1

私の知る限り、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) 水曜日 11 月 14 日 23:00:00 EST 2012

これはどうして起こるのでしょうか?? さらに奇妙なのは、Jboss などの特定の環境でのみ発生することです。私は現在、以下の環境を使用しています。

  • ジャバ1.6
  • アイバティス 2.34
  • jboss-5.1 (サーバー)
  • tomcat 6.0 (ローカル)
  • オラクル11g

役に立つ手がかりやリンクを教えてくれる人はいますか? それは本当に私を悩ませます!!


ここにさらに情報を追加します。Java では Date タイプを使用し、Oracle では TIMESTAMP WITH TIMEZONE を使用しています。

Date に値 ("11/15/2012", MM/dd/yyyy, US/Eastern) を格納しました。

そして、iBatisを使用してこの値をOracleに送信しました。そして、次のように表示されます

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

これは正しくありません。DST が 11 月に終了するため、タイム ゾーンは -05:00 である必要があります。

さらに、Javaコードからこの値を取得すると、

Wed Nov 14 23:00:00 EST 2012を返しますが 、これはThu Nov 15 00:00:00 EST 2012と予想されます。

問題が解決しました。

ありがとうございます。理由がわかりました。ojdbc ドライバーの既知のバグです。このリンクを参照してください。

4

1 に答える 1

0

ojdbc の既知のバグです。ライブラリをアップグレードした後、問題は発生しませんでした。

これを参照

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

于 2013-10-11T21:21:34.903 に答える