java 8比较日期时间,分区时间

时间:2017-03-01 21:05:02

标签: java time

如何检查请求是否在此窗口之间?我有一段时间请求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")); 

1 个答案:

答案 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));
}