java按当天时间段排除掉禁用时间区间,返回不重叠得时间段
时间: 2023-11-21 18:03:53 浏览: 33
您好!针对您的问题,我可以给出以下的思路和建议:
1. 首先,我们需要定义一个时间段的数据结构,用于表示时间段的开始时间和结束时间,可以使用Java中的LocalDateTime类进行表示;
2. 然后,我们需要定义一个禁用时间区间的数据结构,用于表示禁用时间段的开始时间和结束时间;
3. 接下来,我们可以先获取当前时间所在的日期,然后根据起始时间和结束时间生成一个完整的时间段;
4. 最后,我们可以遍历所有的禁用时间区间,排除掉与当前时间段重叠的部分,并将不重叠的时间段添加到结果集中。
下面是一个简单的Java程序,用于实现上述的功能:
```
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
public class TimeUtil {
static class TimeRange {
LocalDateTime start;
LocalDateTime end;
public TimeRange(LocalDateTime start, LocalDateTime end) {
this.start = start;
this.end = end;
}
public LocalDateTime getStart() {
return start;
}
public void setStart(LocalDateTime start) {
this.start = start;
}
public LocalDateTime getEnd() {
return end;
}
public void setEnd(LocalDateTime end) {
this.end = end;
}
}
static class DisabledRange {
LocalDateTime start;
LocalDateTime end;
public DisabledRange(LocalDateTime start, LocalDateTime end) {
this.start = start;
this.end = end;
}
public LocalDateTime getStart() {
return start;
}
public void setStart(LocalDateTime start) {
this.start = start;
}
public LocalDateTime getEnd() {
return end;
}
public void setEnd(LocalDateTime end) {
this.end = end;
}
}
public static List<TimeRange> getAvailableTimeRanges(LocalDateTime start, LocalDateTime end, List<DisabledRange> disabledRanges) {
List<TimeRange> availableRanges = new ArrayList<>();
LocalDateTime currentDate = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0);
TimeRange currentRange = new TimeRange(currentDate.withHour(start.getHour()).withMinute(start.getMinute()),
currentDate.withHour(end.getHour()).withMinute(end.getMinute()));
for (DisabledRange disabledRange : disabledRanges) {
if (isTimeOverlap(currentRange.start, currentRange.end, disabledRange.start, disabledRange.end)) {
if (currentRange.start.isBefore(disabledRange.start)) {
availableRanges.add(new TimeRange(currentRange.start, disabledRange.start));
}
if (currentRange.end.isAfter(disabledRange.end)) {
currentRange = new TimeRange(disabledRange.end, currentRange.end);
} else {
return availableRanges;
}
}
}
availableRanges.add(currentRange);
return availableRanges;
}
public static boolean isTimeOverlap(LocalDateTime start1, LocalDateTime end1, LocalDateTime start2, LocalDateTime end2) {
if (start1.isEqual(start2) || end1.isEqual(end2)) {
return true;
}
if (start1.isBefore(start2) && end1.isAfter(start2)) {
return true;
}
if (start1.isAfter(start2) && start1.isBefore(end2)) {
return true;
}
return false;
}
}
```
这个程序中,getAvailableTimeRanges方法用于获取当前日期下可用的时间段,isTimeOverlap方法用于判断两个时间段是否重叠。您可以根据实际需求进行调整和扩展。