前言
一、校验两个时间段是否重合
二、code
public class DateUtil {
public static boolean overlapped(TimeSlot slot1, TimeSlot slot2) {
TimeSlot previous, next;
previous = slot1.startTime.isBefore(slot2.startTime) ? slot1 : slot2;
next = slot2.startTime.isAfter(slot1.startTime) ? slot2 : slot1;
return !(le(previous, next) || ge(previous, next));
}
public static TimeSlot buildSlot(LocalDateTime startTime, LocalDateTime endTime) {
return new TimeSlot(startTime, endTime);
}
private static boolean le(TimeSlot prev, TimeSlot next) {
return lt(prev, next) || next.endTime.isEqual(prev.startTime);
}
private static boolean ge(TimeSlot prev, TimeSlot next) {
return gt(prev, next) || prev.endTime.isEqual(next.startTime);
}
private static boolean gt(TimeSlot prev, TimeSlot next) {
return prev.endTime.isBefore(next.startTime);
}
private static boolean lt(TimeSlot prev, TimeSlot next) {
return next.endTime.isBefore(prev.startTime);
}
@Data
static class TimeSlot{
private LocalDateTime startTime;
private LocalDateTime endTime;
public TimeSlot(LocalDateTime startTime, LocalDateTime endTime) {
if (startTime.isAfter(endTime)) {
this.startTime = endTime;
this.endTime = startTime;
} else {
this.startTime = startTime;
this.endTime = endTime;
}
}
}
}
2.调用示例
LocalDateTime s1 = LocalDateTime.of(2022, 03, 17, 17, 10, 10);
LocalDateTime e1 = LocalDateTime.of(2022, 03, 17, 17, 20, 20);
LocalDateTime s2 = LocalDateTime.of(2022, 03, 17, 17, 20, 30);
LocalDateTime e2 = LocalDateTime.of(2022, 03, 17, 17, 30, 30);
boolean overlapped = overlapped(buildSlot(s1, e1),
buildSlot(s2, e2));
System.out.println("overlapped = " + overlapped);
总结