を使用して OffsetDateTime オブジェクトを作成する
- ofInstant(instant, zoneid) または via
- 流暢なインターフェース
流暢なインターフェイスを介したインスタンス化が夏時間の境界を超える場合、(compareTo アサーションを使用するか、ZoneOffset フィールドと LocalDateTime フィールドを比較することによって) 等しくないオブジェクトにつながる可能性があります。次の例を検討してください。
OffsetDateTime inAMonth = OffsetDateTime.now().plusMonths(1);
OffsetDateTime inAMonth2 = OffsetDateTime.ofInstant(inAMonth.toInstant(), ZoneId.systemDefault());
10 月中旬の中央ヨーロッパ (ZoneId 'Europe/Berlin') では、最初の呼び出し ( ) をplusMonths()
再利用するため、2 つの等しくないオブジェクトが生成されます。offset
now()
オフセットが再計算されない理由を知っている人はいますか?
単体テスト中にこの問題に遭遇しましたが、私が思いついた唯一の回避策は、a) 流れるようなインターフェイスを使用しないか、b) 流れるようなインターフェイスを使用している間はクロス DST ジャンプを使用しないことでした。残念ながら、OffsetDateTime 以外のものを使用することはできません。