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