是否有一些内置方法可以检查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);
}
}
答案 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。