[解決済み] ZoneOffset.UTCとZoneId.of("UTC")の違いは何ですか?
質問
なぜ
ZonedDateTime now = ZonedDateTime.now();
System.out.println(now.withZoneSameInstant(ZoneOffset.UTC)
.equals(now.withZoneSameInstant(ZoneId.of("UTC"))));
プリントアウト
false
?
私は、両方の
ZonedDateTime
のインスタンスが等しくなるようにします。
どのように解決するのですか?
その答えは
のjavadocを参照してください。
ZoneId
は(強調) ...
ZoneIdは、以下の変換に使用されるルールを識別するために使用されます。 InstantとLocalDateTimeを比較する。IDには2つの異なるタイプがあります。
- 固定オフセット - UTC/グリニッジからの完全に解決されたオフセットで、すべてのローカルな日付時刻に同じオフセットを使用します。
- 地理的地域 - UTC/グリニッジからのオフセットを求めるための特定のルールセットが適用される地域
ほとんどの固定オフセットはZoneOffsetで表される。 normalized()を呼び出すと は、任意のZoneIdに対して、固定オフセットIDを確実に表現します。 をZoneOffsetとする。
... そして
の javadoc を参照してください。
ZoneId#of
(強調)。
このメソッドは、ZoneIdまたはZoneOffsetを生成するIDを解析します。 A IDが'Z'であるか、'+'または'-'で始まる場合、ZoneOffsetが返されます。 .
引数idは、以下のように指定します。
"UTC"
を返すので
ZoneId
というオフセットがあり、これも文字列で表示される。
System.out.println(now.withZoneSameInstant(ZoneOffset.UTC));
System.out.println(now.withZoneSameInstant(ZoneId.of("UTC")));
出力する。
2017-03-10T08:06:28.045Z
2017-03-10T08:06:28.045Z[UTC]
を使うので
equals
メソッドを使用して比較する場合
オブジェクトの等価性をチェックする
. 記載されている差分のため、評価結果は
false
.
というときに
normalized()
メソッドを使用した比較は、ドキュメントで提案されているように
equals
が返されます。
true
というように
normalized()
は対応する
ZoneOffset
:
タイムゾーンIDを正規化し、可能な場合はZoneOffsetを返します。
now.withZoneSameInstant(ZoneOffset.UTC)
.equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())); // true
ドキュメントにあるように、もし
"Z"
または
"+0"
を入力IDとして指定します。
of
が返されます。
ZoneOffset
を直接呼び出す必要はありません。
normalized()
:
now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("Z"))); //true
now.withZoneSameInstant(ZoneOffset.UTC).equals(now.withZoneSameInstant(ZoneId.of("+0"))); //true
確認すること
同じ日付時刻を保存しているかどうか
を使用することができます。
isEqual
メソッドで代用できます。
now.withZoneSameInstant(ZoneOffset.UTC)
.isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))); // true
サンプル
System.out.println("equals - ZoneId.of(\"UTC\"): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("UTC"))));
System.out.println("equals - ZoneId.of(\"UTC\").normalized(): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("UTC").normalized())));
System.out.println("equals - ZoneId.of(\"Z\"): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("Z"))));
System.out.println("equals - ZoneId.of(\"+0\"): " + nowZoneOffset
.equals(now.withZoneSameInstant(ZoneId.of("+0"))));
System.out.println("isEqual - ZoneId.of(\"UTC\"): "+ nowZoneOffset
.isEqual(now.withZoneSameInstant(ZoneId.of("UTC"))));
出力する。
equals - ZoneId.of("UTC"): false
equals - ZoneId.of("UTC").normalized(): true
equals - ZoneId.of("Z"): true
equals - ZoneId.of("+0"): true
isEqual - ZoneId.of("UTC"): true
関連
-
JQuery DataTable 详解
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] Javaでネストされたループから抜け出すには?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] 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 のエラーです。未解決のコンパイル問題 解決方法
-
エラーが報告されました。リソースの読み込みに失敗しました:サーバーは500(内部サーバーエラー)のステータスで応答しました。
-
IllegalArgumentException この例外を解決する方法
-
javaの模造品QQ WeChatのチャットルーム
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
このラインで複数のマーカーを解決する方法
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)