[dromara/hutool]DateUtils.isOverlap 重叠定义问题

2023-12-12 440 views
5
版本情况

JDK版本: openjdk_8_201 hutool版本: 5.8.21

问题描述(包括截图)

关键提交项 #2725 类似描述 #3215

isOverlap这个方法用于检查两个时间段是否有时间重叠, 5.8.9版本之前,此方法对于前后连续的两个时间段是返回false不重叠. 5.8.9版本之后,此方法对于前后连续的两个时间段是返回true重叠.

这是超乎预期的逻辑调整, 我认为是它是一种不兼容更新. 应该提供重载方法以适配最初的场景.

1.复现代码 image

    public static void main(String[] args) {
        //判断两个时间段是否有交集
        Date startTime1 = DateUtil.parse("2023-11-15 08:00:00");
        Date endTime1 = DateUtil.parse("2023-11-15 10:00:00");

        Date startTime2 = DateUtil.parse("2023-11-15 10:00:00");
        Date endTime2 = DateUtil.parse("2023-11-15 11:00:00");

        if (DateUtil.isOverlap(startTime1, endTime1, startTime2, endTime2)) {
            // 版本>=5.8.10
            System.out.println(StrFormatter.format("有交集"));
        }else {
            // 版本<=5.8.9
            System.out.println(StrFormatter.format("无交集"));
        }
    }

回答

9

相关PR和issue你也看了,本质上这算是个bug的存在,因此做了修复。

@CherryRum 帮忙解释下呗~~

5

关于不向下逻辑兼容的问题,我认为:

  1. 既然是bug,但是为了兼容而一直保留这个bug并不是一种理想状态
  2. 升级解决bug难免会有逻辑变更,我觉得这里的逻辑变更不足以导致大的升级故障,故做了修改。
6

感谢您的回复! 也谢谢您对我提出的问题进行思考, 我会尊重社区的选择.

实际上我赞同 #3215 的描述, 即旧版本(version<=5.8.9)连续的时间是"不重叠"的, 此特性是正确的并不是bug.. 相反,是 #2725 的提交重新改写了方法的定义(与之前"重叠"的定义不同了)

0

是的 其实这个功能很久了,开始时候重叠的定义,是加上了meeting,这个注释中是明确我写了,而且提示用户精确的看艾伦区间划分,用户没有多少知道艾伦区间代数的,所以我一直也不想实现一版本新的完全符合定义的(太懒了),不过现在6.0我已经准备提交了新的艾伦区间的工具类,那个可能更加灵活以及精准。

5

方法名 isOverlap 是一种比较泛的概念, 确实不好定义清楚,. 对此我表示理解.
最后谢谢解答. 在此对您做出的贡献表达感谢!