不正确,当我输入21:00:00和22:00:00,提示为true
时间: 2023-08-21 15:01:49 浏览: 82
非常抱歉,之前的代码有误。正确的代码如下:
```java
import java.time.LocalTime;
import java.time.Duration;
public class TimeOverlapDemo {
public static void main(String[] args) {
LocalTime startTime = LocalTime.of(23, 0);
LocalTime endTime = LocalTime.of(8, 0);
Duration interval = Duration.between(startTime, endTime);
LocalTime start = LocalTime.of(1, 0);
LocalTime end = LocalTime.of(2, 0);
Duration duration = Duration.between(start, end);
if (duration.isNegative()) {
duration = duration.plusDays(1);
}
boolean overlap = false;
if (duration.compareTo(interval) > 0) {
overlap = true;
} else {
LocalTime endInterval = endTime.plusDays(1);
LocalTime endDuration = end.plusDays(start.isAfter(end) ? 1 : 0);
overlap = !(endDuration.isBefore(startTime) || endInterval.isBefore(start));
}
System.out.println("Overlap: " + overlap);
}
}
```
在这个代码中,我使用了两种方法来处理跨越两天的情况:
1. 对于时间间隔interval,我直接使用了起始时间startTime和结束时间endTime进行计算,而没有使用plusDays()方法。这是因为起始时间在当天,而结束时间在第二天,直接计算即可。
2. 对于时间段的结束时间endDuration和时间区间的结束时间endInterval,我分别使用了plusDays()方法和isAfter()方法来处理。如果时间段的结束时间在起始时间之前(跨越了两天),则需要加上一天的时间间隔。而时间区间的结束时间是第二天的8:00,因此需要使用plusDays()方法。同时,需要使用isAfter()方法来判断时间段的起始时间和结束时间是否跨越了两天。
这样,就可以正确地判断时间段和时间区间是否有重叠了。
阅读全文