检查两个时间段是否有时间重叠(允许重叠一部分时间不算重叠)

/**
     * 从 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和等于原算法保持一致
允许重叠的时间, 负数这里没校验,自己用, 正常需要加一个。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值