2011-08-10 7 views
3

SQL、jdbc、JVM、linuxのタイムゾーンの問題に取り組んでいます。java.sql.dateのドキュメントを理解できません

私はjdbcに渡す必要のあるクラスがjava.sql.dateであることがわかります。だから私はドキュメントを読んで、それを何も作ることはできません。

私が理解するように、java.util.Dataとjava.sql.dateの両方は、エポックから数ミリ秒を保持します。私はjava.sql.dateのコンストラクタの定義を見てみると

それは

は、「指定されたミリ秒の値を使用してDateオブジェクトを構築しますと言います。指定されたミリ秒の値は、時間情報が含まれている場合は、ドライバが設定されますGMTゼロに対応する既定のタイムゾーン(アプリケーションを実行しているJava仮想マシンのタイムゾーン)の時間コンポーネントです。

OK - 質問1 - 「指定されたミリ秒値に時間情報が含まれている場合」 - 何らかの時間情報が含まれていることを明確にしてください。

「あなたがルーチンに与えるミリ秒数が、閏秒などを考慮して正確な曜日境界を表していない場合」を意味しますか?それは会う/失敗するかなりランダムなテストのように聞こえる!

それとも、天国のために」を意味しない私たちに昼近くに何かを与える、と私たちは問題の一日の始まりにそれを切り捨てます

質問2 - ?、言葉では、これは奇妙なものですそれを??「FOR」句は明らかにいくつかの歯車が適切にメッシュにすることを意図しての行動である - しかし、彼らはどのような歯車で

答えて

5

java.sql.Datejava.sql.Timejava.sql.Timestampすべてしかし、java.util.Date拡張:

  • java.sql.Date真夜中に丸めミリ秒を持っている - それが「ゼロ時間とのデート」だ
  • java.sql.Timeはミリ秒未満24時間を持っている - 正規java.util.Date
  • のように - java.sql.Timestamp
  • 1970-01-01java.util.Dateがいっぱい日付と時刻を持っているみたいです
+0

あなたの答えは公開されたドキュメントと矛盾しているようです。 "ドライバは、ゼロGMTに対応するデフォルトのタイムゾーン(アプリケーションを実行するJava仮想マシンのタイムゾーン)の時間に時間コンポーネントを設定します" これは、いつかはGMTの真夜中になるでしょう - それを言うにはかなりぎこちない方法ですが。 –

+0

「java.sql.Dateオブジェクトはいつか真夜中のGMTを含んでいます」とは、オブジェクトがあった瞬間にJVMが知っていたうるう秒数にしか当てはまりません作成した。うるう秒情報が後で更新される場合、同じ瞬間が前日に後ろにシフトすることがあります! –

0

私があなただったら、ミリ秒のコンストラクタを使用しないでください。代わりにDate.valueOfを使用します。

+0

しかし、java.sql.Dateはミリ秒のコンストラクタしか持たず、もう1つは非推奨です。 オハイオ州 - 私は参照してください - ゼロミリ秒の値を使用してそれを構築し、それから瞬間をインストールするためにvalueOfメソッドを使用してください - それは私が疑惑の雲をカットすることができます。 "JDBCの日付エスケープ形式"の仕様を調べる必要があります。 –

+0

OK - その派手なフレーズは、「日付をyyyy-mm-ddの形式で表現する」ことを意味するようです。私はその結果がUTCの真夜中を表していると仮定しています - あるいはJVMのデフォルトタイムゾーンで真夜中でしょうか? –

+0

右 - 静的なvalueOfメソッドは擬似コンストラクタです。他のものはinstanceOfです。 TVM –

0

java.sql.Dateは日付のみを表し、時間情報はありません。 java.sql.Timeをその時間に使用する必要があります。

+0

ありがとうございましたNivas - しかし、私はあなたが "創造の瞬間に知られていたような閏秒を含む、日付のみ、UTCで"を意味しなければならないと思いますか? –

関連する問題