[解決済み] ZonedDateTimeとOffsetDateTimeの違いは何ですか?
質問
ドキュメントを読みましたが、どのような場合にどちらを使うべきか、まだ理解できていません。
ドキュメントによると
OffsetDateTime
は、データベースに日付を書き込むときに使われるはずですが、その理由がわかりません。
どうすればいいですか?
<ブロッククオートQ: java 8のZonedDateTimeとOffsetDateTimeの違いは何ですか?
javadocsにはこのように書かれています。
"です。
OffsetDateTime
,ZonedDateTime
とInstant
はすべてナノ秒の精度で時間軸上のある瞬間を保存します。Instant
は最も単純で、単にその瞬間を表します。OffsetDateTime
は、UTC/Greenwich からのオフセットをインスタンスに追加し、ローカルの日付時刻を取得できるようにします。ZonedDateTime
は、完全なタイムゾーンのルールを追加します。
出典 https://docs.oracle.com/javase/8/docs/api/java/time/OffsetDateTime.html
このように
OffsetDateTime
と
ZonedDateTime
というのは、後者にはサマータイム調整やその他さまざまな異常事態をカバーするルールが含まれているからです。
簡単に言うと
時間帯 = ( オフセット・フロムUTC + ルール-フォー-アノマリー )
<ブロッククオート
Q: ドキュメントによると
OffsetDateTime
は、データベースに日付を書き込むときに使用されるべきですが、その理由がわかりません。
ローカルタイムのオフセットがある日付は、常に同じ時刻を表し、したがって安定した順序を持ちます。 これに対して、タイムゾーンの情報をすべて含む日付は、それぞれのタイムゾーンのルールが調整されると、その意味が不安定になります。 (例えば、将来の日付時刻の値などです。
ZonedDateTime
は実装に問題があります。
-
計算されたオフセットを保存することができる......そして、取得したオブジェクトは、ゾーンIDの現在のルールと矛盾したオフセットを持つかもしれない。
-
計算されたオフセットを破棄することができます ... そして、検索されたオブジェクトは、保存されたものとは異なる絶対/普遍タイムライン上のポイントを表します。
Javaオブジェクトのシリアライゼーションを使用する場合、Java 9の実装は最初のアプローチを取ります。 これは間違いなく、より正しい処理方法ですが、これは文書化されていないようです。 (JDBCドライバとORMバインディングは、おそらく同様の決定をしており、うまくいけば正しく処理されているはずです。)
しかし、手動で日付/時刻の値を保存するアプリケーションを作成している場合、あるいは
java.sql.DateTime
となると、Zone-idの複雑な処理は...おそらく避けるべきものでしょう。 というわけで、アドバイスです。
日付の意味や順序が時間とともに不安定になることに注意してください は、もしかしたら はアプリケーションにとって問題となります。 また、ゾーンルールの変更はエッジケースであるため、予期せぬタイミングで問題が発生する可能性があります。
アドバイスの(可能性のある)第二の理由は、構成が
ZonedDateTime
が曖昧な点があります。 たとえば、「時計を戻す」期間では、ローカルタイムとゾーンIDを組み合わせると、2つの異なるオフセットが得られます。 そのため
ZonedDateTime
は一貫してどちらかを選びますが、これが常に正しい選択とは限りません。
さて、これは
ZonedDateTime
の値はこのようになります。 しかし、エンタープライズアプリケーションを構築する人の観点からは、(不正確である可能性のある)値が
ZonedDateTime
の値は永続的に使用されます。
関連
-
[解決済み] Spring Data JPAにおけるCrudRepositoryとJpaRepositoryのインターフェースの違いは何ですか?
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
JavaMailのメール送信が失敗するケースとその説明の分析
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] Javaでネストされたループから抜け出すには?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] カスタムオブジェクトのArrayListをプロパティでソートする
-
[解決済み] JDKとJREの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
java の例外が発生しました java
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
Eclipseでプロジェクトエクスプローラービューとパッケージエクスプローラービューを使う
-
サーブレットクラスのインスタンス化エラーの解決法
-
SocketTimeoutExceptionの解決方法です。読み込みがタイムアウトした
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。
-
Java(1)仕上げの基本概念+eclipseのインストール構成
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
-
[解決済み] java.util.DateからStringへの変換