3

これを入力していると、自分でそれを理解しました。私自身を含む将来のユーザーのために、私自身の質問に答えるつもりです。

インターバルでオブジェクトに保存できるようにしたいのLocalDateTimeですが、許可されていないようです。私がこれを行うとき:

    LocalDateTime start = new LocalDateTime();

    LocalDateTime end = start.plusMinutes( 30 );

    Interval interval = new Interval( start, end );

コンパイルの問題が発生します。LocalDateTimeではないからだと思いますReadableInstant

適切な回避策はありますか?

これは可能なようです:

期間期間 = 新しい期間 (開始、終了);

ただし、「getStart\End」メソッドは失われます。

4

1 に答える 1

4

で使用するIntervalLocalDateTimeは、これを行う必要があります。

Interval interval = new Interval( start.toDateTime(), end.toDateTime() );

結果の時刻は、ローカル タイム ゾーンから変換され、どのタイム ゾーンを扱っているかがわかるため、デバッグが容易になります。ただし、夏時間の期間中は問題が発生します。その結果を強制的に回避するにDateTimeZone.UTCは、時間に関連付けられたタイムゾーン データが失われます (実際に LocalDateTime で開始したかどうかは通常は気にしませんが、一貫して使用し、 を使用Intervalせずに をビルドしないようにしてください)。変換。

Interval interval = new Interval( 
  start.toDateTime(DateTimeZone.UTC), end.toDateTime(DateTimeZone.UTC) );

これは、次のテストで実証されています (EST タイム ゾーンにいると仮定します)。

@Test
public void testLocalDateTimeDST() {
    LocalDateTime dst_2017_03_12 = LocalDateTime.parse("2017-03-12T02:01:00");
    System.out.println(dst_2017_03_12);
    try {
        System.out.println(dst_2017_03_12.toDateTime());
        Assert.fail("Should've thrown an IllegalInstantException");
    } catch (IllegalInstantException e) {

    }
    System.out.println(dst_2017_03_12.toDateTime(DateTimeZone.UTC));
}
于 2013-03-18T23:13:36.950 に答える