最近碰到一个需求,要求新的起始时间和终止时间不能与之前拥有的时间冲突,也就是不能重合,不能有交集,不能相等。
首先我们要定义一个类,里面有开始时间和结束时间
public class TimeRange {
private Date startTime;
private Date endTime;
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
}
之后我们需要查询出之前拥有的开始时间和结束时间,把这两个时间写入进一个list中。把新获取的时间放入一个对象中
TimeRange targetTimeRange = new TimeRange(); targetTimeRange.setStartTime(newStartTime); targetTimeRange.setEndTime(newEndTime);
最后调用方法
private static boolean isTimeConflict(TimeRange targetTimeRange, List<TimeRange> timeRanges) {
// 获取当前时间
Date currentTime = new Date();
// 检查目标时间段的起始时间是否小于当前时间
if (targetTimeRange.getStartTime().before(currentTime)) {
// 目标时间段的起始时间小于当前时间,表示冲突
return true;
}
for (TimeRange timeRange : timeRanges) {
// 时间段1的开始时间、结束时间,新的时间
Date startTime1 = targetTimeRange.getStartTime();
Date endTime1 = targetTimeRange.getEndTime();
// 时间段2的开始时间、结束时间
Date startTime2 = timeRange.getStartTime();
Date endTime2 = timeRange.getEndTime();
// 判断时间是否相互冲突、存在交集或完全重合的逻辑
if ((startTime1.before(endTime2) && endTime1.after(startTime2)) ||
(startTime2.before(endTime1) && endTime2.after(startTime1)) ||
(startTime1.equals(startTime2) && endTime1.equals(endTime2))) {
// 时间段相互冲突、存在交集或完全重合
return true;
}
}
// 时间段不相互冲突、不存在交集或完全重合
return false;
}
我这里用的是for循环,如果觉得这个效率太低可以采用其他方法。