检查是否由于夏令时而增加了一个小时

Check if additional hour due to DST

在我的应用程序中,我必须经常检查给定的小时数,因为 ZonedDateTime 是由于 DST 而增加的小时数。考虑从夏令时冬令时

的转变
1) *date* 01:00:00+02:00  
2) *date* 02:00:00+02:00
3) *date* 02:00:00+01:00
4) *date* 03:00:00+01:00

我想编写最简单的函数 isExtraHour(ZonedDate time) 对于 1,2,4 将 return false 并且对于 3 case 将 return true 当然是用Java8的时候API.

到目前为止我得到的最简单的是:

public boolean isExtraHour(final ZonedDateTime time) {
    final ZoneOffsetTransition dayTransition = time.getZone().getRules()
            .getTransition(time.toLocalDateTime());

    return dayTransition != null && dayTransition.isOverlap() && dayTransition.getInstant()
            .equals(time.toInstant());
}

这就是我要使用的:

public boolean isExtraHour(final ZonedDateTime time) {
  return time.getZone().getRules().getValidOffsets(time.toLocalDateTime()).size() > 1;
}

请注意,它 returns 对于整个重叠小时都是正确的,我认为这就是您需要的答案。