检查是否由于夏令时而增加了一个小时
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 对于整个重叠小时都是正确的,我认为这就是您需要的答案。
在我的应用程序中,我必须经常检查给定的小时数,因为 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 对于整个重叠小时都是正确的,我认为这就是您需要的答案。