乔达时间夏令时检测



是否有一些内置方法来检查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);
    }
}

我不认为 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。

最新更新