1

を使用して OffsetDateTime オブジェクトを作成する

  1. ofInstant(instant, zoneid) または via
  2. 流暢なインターフェース

流暢なインターフェイスを介したインスタンス化が夏時間の境界を超える場合、(compareTo アサーションを使用するか、ZoneOffset フィールドと LocalDateTime フィールドを比較することによって) 等しくないオブジェクトにつながる可能性があります。次の例を検討してください。

OffsetDateTime inAMonth = OffsetDateTime.now().plusMonths(1);
OffsetDateTime inAMonth2 = OffsetDateTime.ofInstant(inAMonth.toInstant(), ZoneId.systemDefault());

10 月中旬の中央ヨーロッパ (ZoneId 'Europe/Berlin') では、最初の呼び出し ( ) をplusMonths()再利用するため、2 つの等しくないオブジェクトが生成されます。offsetnow()

オフセットが再計算されない理由を知っている人はいますか?

単体テスト中にこの問題に遭遇しましたが、私が思いついた唯一の回避策は、a) 流れるようなインターフェイスを使用しないか、b) 流れるようなインターフェイスを使用している間はクロス DST ジャンプを使用しないことでした。残念ながら、OffsetDateTime 以外のものを使用することはできません。

4

2 に答える 2