Joda Time夏令时检测

时间:2012-04-23 12:27:24

标签: jodatime

是否有一些内置方法可以检查DateTimeDateTimeZone的小时数?

我写了一个小实用程序类,但更喜欢内置方法。

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);
    }
}

1 个答案:

答案 0 :(得分:3)

我认为JodaTime库中没有直接的方法,但可能更短一些:

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

这与您发布的内容略有不同,因为它会查看提供日期所代表的日期(丢弃时间)而不是下一个 23/24/25小时,您实际上是什么do,这取决于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。