java按时间段小时分钟HH:mm 排除掉禁用时间区间,返回不重叠得时间段
时间: 2024-02-06 17:04:40 浏览: 59
好的,根据您的要求,我可以给出以下 Java 代码实现:
```java
import java.time.Duration;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
public class TimeSlotFinder {
// 禁用时间段
private List<TimeSlot> disabledTimeSlots = new ArrayList<>();
// 返回不重叠的时间段
public List<TimeSlot> getAvailableTimeSlots(LocalTime startTime, LocalTime endTime, Duration duration) {
List<TimeSlot> availableTimeSlots = new ArrayList<>();
LocalTime currentStartTime = startTime;
while (currentStartTime.plus(duration).isBefore(endTime)) {
if (isAvailable(currentStartTime, duration)) {
availableTimeSlots.add(new TimeSlot(currentStartTime, currentStartTime.plus(duration)));
}
currentStartTime = currentStartTime.plusMinutes(1);
}
return availableTimeSlots;
}
// 判断指定时间段是否可用
private boolean isAvailable(LocalTime startTime, Duration duration) {
for (TimeSlot disabledTimeSlot : disabledTimeSlots) {
if (disabledTimeSlot.overlaps(startTime, startTime.plus(duration))) {
return false;
}
}
return true;
}
// 时间段类
private static class TimeSlot {
private LocalTime startTime;
private LocalTime endTime;
public TimeSlot(LocalTime startTime, LocalTime endTime) {
this.startTime = startTime;
this.endTime = endTime;
}
public boolean overlaps(LocalTime startDateTime, LocalTime endDateTime) {
return !(startDateTime.isAfter(endTime) || endDateTime.isBefore(startTime));
}
}
}
```
使用方法:
1. 创建 `TimeSlotFinder` 实例。
2. 调用 `getAvailableTimeSlots` 方法,传入起始时间、结束时间和所需时间段的长度。
3. 方法会返回一个 `List`,其中包含所有可用的时间段。
需要注意的是,`TimeSlotFinder` 类中的 `disabledTimeSlots` 属性是禁用的时间段列表,您需要在使用前将禁用的时间段添加到该列表中。同时,返回的可用时间段可能会非常多,可以根据具体需要进行筛选。
阅读全文