ZonedDateTime now = ZonedDateTime.now(ZoneId.of("Etc/GMT+1"));
デバッグ時に2019-07-02T14:23:57.463-01:00 [Etc/GMT + 1]が表示されるときのこの値
16:23である必要があります。何が欠けていますか..何らかの理由でクロックが2時間遅いのですか?
関連した質問
- Javaクラスで使用されるKotlinのAOP
- マップに値が存在するかどうかを確認し、キーを返すか、例外をスローします
- 1つが列挙型である2つのフィールドでソートする方法は?
- 5つ以上のtxtファイルを1つのファイルにJavaでマージするにはどうすればよいですか?
- グループ化、並べ替え、Javaでグループを並べ替える
- 通常のメソッドよりもラムダを使用するのはなぜですか?
- 「Java8メソッドリファレンス」オブジェクトをストリームに渡すことは可能ですか?
- ストリームJava8を使用してリストJavaで変更する
- 複数のcsvファイルからIDと外部IDを取得する方法
- Javaのメソッド内に存在するクラスのオブジェクトを作成するにはどうすればよいですか?
tl;dr
単なるオフセットではなくタイムゾーンを使用します。
詳細 h1>現代のプロトコルでは、オフセットの時間-分-秒の数は、ベースライン(GMT/UTC)のaheadである正の数と見なされ、behindである負の数と見なされますベースライン。一部の古いプロトコルは逆です。あなたの
Etc/GMT+1
逆スタイルのようです。最良の解決策は、単なるオフセットではなくタイムゾーンを使用することです。オフセットは、単に数時間分秒です。タイムゾーンはずっと長くなっています。タイムゾーンは、特定の地域の人々が使用するオフセットの過去、現在、および将来の変更の履歴です。
タイムゾーンの名前は
Continent/Region
の形式です 。たとえば、America/Montreal
、Europe/Paris
、およびPacific/Auckland
。ゾーンの名前を角括弧で追加するために賢明に拡張された標準ISO 8601形式の文字列を生成します。
ビジネスロジック、ロギング、およびデータ変更のほとんどはUTCである必要があります。 UTCに調整するには、
Instant
を抽出します あなたのZonedDateTime
から 。タイムライン上の同じ瞬間、同じポイントですが、実際の時刻は異なります。標準のISO 8601形式の文字列を生成します。
あなたの例これで、特定の状況を調べるために戻ることができます。
[Etc/GMT+1]
で指定された文字列を解析しましょう ゾーン名として。次にUTCに調整します。
再度
Europe/Dublin
に調整します 。コンソールにダンプします。
このコードはIdeOne.comでライブで実行されます。
14時間目案の定、私たちは
時間15[Etc/GMT+1]
で曜日を見る UTC(時間オフセットの古い逆の意味)の時間で、時間は14
である時間 。UTC(0時間-分-秒のオフセット)の時間は
時間1615
です 。ダブリンのタイムゾーンは、その時点で夏時間(DST)ではなく、アイルランド標準時(IST)、UTC +1を使用しています。そのため、その時間は
16
で表示されます 、UTCの15
の1時間先 時間。重要:これら3つすべてが同じ瞬間、つまりタイムライン上のまったく同じポイントを表していることを理解してください。壁時計の時刻は異なります。同じ瞬間を表示する3つの方法です。
ところで、タイムゾーンの代わりにオフセットを使用する場合は、
OffsetDateTime
を使用します &ZoneOffset
クラス。ザ・ZonedDateTime
&ZoneId
クラスはタイムゾーン用です。