1

有没有一些内置的方法来检查一个DateTimewithDateTimeZone有多少小时?

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

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 回答