/**
* 从 hu tool工具复制来改的
* 参考 <a href="https://github.com/dromara/hutool/pull/2210">...</a>
* 检查两个时间段是否有时间重叠<br>
* 重叠指两个时间段是否有交集
*
* @param realStartTime 第一个时间段的开始时间
* @param realEndTime 第一个时间段的结束时间
* @param startTime 第二个时间段的开始时间
* @param endTime 第二个时间段的结束时间
* @param allowOverlayTime 允许重叠的时间,秒
* @return true 表示时间有重合
*/
public static boolean isOverlap(ChronoLocalDateTime<?> realStartTime,
ChronoLocalDateTime<?> realEndTime,
ChronoLocalDateTime<?> startTime,
ChronoLocalDateTime<?> endTime,
Integer allowOverlayTime) {
// x>b-allowOverlayTime || a>y-allowOverlayTime 无交集
// 则有交集的逻辑为 !(x>b-allowOverlayTime||a>y-allowOverlayTime)
// 可化简为 x<=b-allowOverlayTime && a<=y-allowOverlayTime
return startTime.isBefore(realEndTime.minus(allowOverlayTime, ChronoUnit.SECONDS))
&& endTime.isAfter(realStartTime.plus(allowOverlayTime, ChronoUnit.SECONDS));
}
总有一些比较特殊的需求场景,做个备忘。
新增一个参数接收允许重叠的时间(这个重叠不算重叠),
设置0和等于原算法保持一致
允许重叠的时间, 负数这里没校验,自己用, 正常需要加一个。