java按当天时间段小时分钟HH:mm 排除掉禁用时间区间,返回剩余不重叠得时间区间
时间: 2024-02-06 11:04:40 浏览: 93
可以使用Java 8中的时间API来实现。首先,我们需要定义一个禁用时间区间的类,包含开始时间和结束时间:
```java
import java.time.LocalTime;
public class ForbiddenTimeInterval {
private LocalTime startTime;
private LocalTime endTime;
public ForbiddenTimeInterval(LocalTime startTime, LocalTime endTime) {
this.startTime = startTime;
this.endTime = endTime;
}
public LocalTime getStartTime() {
return startTime;
}
public LocalTime getEndTime() {
return endTime;
}
}
```
接下来,我们可以定义一个方法,接受一个日期和一组禁用时间区间,返回剩余不重叠的时间区间。具体实现如下:
```java
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
public class TimeUtils {
public static List<String> getAvailableTimeSlots(LocalTime date, List<ForbiddenTimeInterval> forbiddenTimeIntervals) {
List<String> availableTimeSlots = new ArrayList<>();
LocalTime startTime = LocalTime.of(0, 0);
for (ForbiddenTimeInterval interval : forbiddenTimeIntervals) {
if (interval.getStartTime().isAfter(startTime)) {
availableTimeSlots.add(getTimeSlot(startTime, interval.getStartTime()));
}
startTime = interval.getEndTime();
}
if (startTime.isBefore(LocalTime.of(23, 59))) {
availableTimeSlots.add(getTimeSlot(startTime, LocalTime.of(23, 59)));
}
return availableTimeSlots;
}
private static String getTimeSlot(LocalTime startTime, LocalTime endTime) {
return startTime.toString() + "-" + endTime.toString();
}
}
```
这个方法接受一个日期和一组禁用时间区间作为参数。我们首先将起始时间设置为0点,然后遍历禁用时间区间。如果当前禁用时间区间的开始时间在起始时间之后,说明这段时间是可用的,将其添加到结果列表中。然后将起始时间设置为当前禁用时间区间的结束时间。
最后,如果结束时间不是23:59,说明最后一段时间也是可用的,将其添加到结果列表中。最后返回结果列表。
使用示例:
```java
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<ForbiddenTimeInterval> forbiddenTimeIntervals = new ArrayList<>();
forbiddenTimeIntervals.add(new ForbiddenTimeInterval(LocalTime.of(9, 0), LocalTime.of(12, 0)));
forbiddenTimeIntervals.add(new ForbiddenTimeInterval(LocalTime.of(13, 0), LocalTime.of(14, 0)));
List<String> availableTimeSlots = TimeUtils.getAvailableTimeSlots(LocalTime.now(), forbiddenTimeIntervals);
System.out.println(availableTimeSlots);
}
}
```
这个示例中,我们定义了两个禁用时间区间,分别是9点到12点和13点到14点。然后调用`getAvailableTimeSlots`方法获取当前时间之后可用的时间区间。
阅读全文
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![sql](https://img-home.csdnimg.cn/images/20250102104920.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)