是否有一些内置方法来检查DateTime
与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);
}
}
我不认为 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。