1

DateTimewithの時間数を確認する組み込みの方法DateTimeZoneはありますか?

私は小さなユーティリティ クラスを作成しましたが、組み込みメソッドを使用したいと考えています。

public class Dst {
    public static long dayHours(DateTime instant) {
        Period day = new Period(0, 0, 0, 1, 0, 0, 0, 0);
        return new Duration(instant, instant.plus(day)).getStandardHours();
    }
    public static boolean hasClockChange(DateTime instant) {
        return 24l != Dst.dayHours(instant);
    }
}
4

1 に答える 1

3

JodaTime ライブラリに直接的な方法があるとは思いませんが、もっと短い方法があるかもしれません:

public static long dayHours(DateTime instant) {
    return new Duration(instant.withMillisOfDay(0), 
                        instant.withMillisOfDay(0).plus(Days.ONE))
                        .getStandardHours();
}

これは、投稿したものとは少し異なります。これは、次の23/24/25 時間ではなく、提供された日付 (時刻を破棄) で表される日を見ているためです。に含まれてinstantいるのは、時刻変更の前後です。

私が自問自答している質問は、その時間数が本当に必要かということです。それともその日に変更があるかどうかだけですか?次に、次のようなものを使用します。

public static boolean hasClockChange(DateTime instant) {
        zone = DateTimeZone.forID("your-time-zone") // or do this with an appropriate constant
        return zone.getOffset(instant.withMillisOfDay(0)) != zone.getOffset(instant.withHourOfDay(23));
}

(時間の変更が午後 11 時以降に行われない場合は、問題ありません)。その情報が必要な場合は、時間の変化の方向に応じて -1/0/1 を返すこともできます。

于 2012-06-05T15:09:54.547 に答える