java17实现24小时制,定义一个时间区间,23:00-08:00,传入时间段01:00-02:00,判断是否重叠,考虑临界点
时间: 2023-08-21 13:03:36 浏览: 167
可以使用Java的LocalTime类来表示时间,并且使用它的isAfter()和isBefore()方法来进行时间的比较。对于时间区间的定义,可以使用java.time.Duration类来表示时间间隔。下面是一个示例代码:
```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 = startTime.plus(interval);
LocalTime endDuration = start.plus(duration);
overlap = !(endDuration.isBefore(startTime) || endInterval.isBefore(start));
}
System.out.println("Overlap: " + overlap);
}
}
```
这段代码中,首先定义了时间区间的起始时间startTime和结束时间endTime,并使用它们来计算时间间隔interval。然后定义了传入的时间段的起始时间start和结束时间end,并使用它们来计算时间间隔duration。由于时间段可能跨越两天(比如23:00-02:00),所以需要判断duration是否为负数,如果是则加上一天的时间间隔。
接下来,根据时间段的长度和时间区间的长度来判断是否有重叠。如果时间段的长度大于时间区间的长度,则一定会有重叠。否则,需要计算时间段的结束时间endDuration和时间区间的结束时间endInterval,并判断它们是否有重叠。如果endDuration在startTime之前,或者endInterval在start之前,则没有重叠。否则,有重叠。
需要注意的是,时间区间的结束时间是第二天的8:00,而不是当天的8:00。因此,在计算endInterval时需要使用plus()方法而不是plusMinutes()或者plusHours()等方法,这样才能正确地处理跨越两天的情况。
阅读全文