如何检查请求是否在此窗口之间?我有一段时间请求2011-12-03T15:15:30-05:00以及可以在任何区域定义的时间窗口,例如09:00:00 + 00:00和17:00 00:00 :00
现在如果我将日期时间解析为LocalTime,我会松开时区。
public LocalTime time(String time){
return LocalTime.from(DateTimeFormatter.ISO_OFFSET_TIME.parse(time));
}
private ZonedDateTime dateTime(String dateTime){
return ZonedDateTime.from(DateTimeFormatter.ISO_DATE_TIME.parse(dateTime));
}
//比较功能
public boolean compare(ZonedDateTime dateTime, LocalTime localTime, LocalTime localTime2) {
LocalTime time = dateTime.withZoneSameInstant(utc).toLocalTime();
int start = time.compareTo(localTime);
int end = time.compareTo(localTime2);
return start >= 0 && end <= 0;
}
现在我调用上面的比较函数:
service.compare(dateTime("2011-12-03T15:15:30-05:00"), time("09:00:00+00:00"), time("17:00:00+00:00"));
答案 0 :(得分:0)
以下是比较任何时区中ZonedDateTime
值的代码示例,以查看它是否属于另一个(或相同)时区中定义的时间窗口,正确调整时区差异。
请注意,时间窗口值现在为OffsetTime
,而不是LocalTime
,因此窗口时区偏移量已知。
另请注意,此代码更改为高级别,这通常是您想要的范围比较。
public static boolean inWindow(ZonedDateTime dateTime, OffsetTime windowStart, OffsetTime windowEnd) {
if (! windowStart.getOffset().equals(windowEnd.getOffset()))
throw new IllegalArgumentException("windowEnd must have same offset as windowStart");
OffsetTime time = dateTime.toOffsetDateTime()
.withOffsetSameInstant(windowStart.getOffset())
.toOffsetTime();
return (! time.isBefore(windowStart) && time.isBefore(windowEnd));
}