Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DateUtils.isOverlap 重叠定义问题 #3387

Closed
creekmoon opened this issue Nov 15, 2023 · 5 comments
Closed

DateUtils.isOverlap 重叠定义问题 #3387

creekmoon opened this issue Nov 15, 2023 · 5 comments
Assignees
Labels

Comments

@creekmoon
Copy link

版本情况

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("无交集"));
        }
    }
@looly
Copy link
Member

looly commented Nov 15, 2023

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

@CherryRum 帮忙解释下呗~~

@looly looly closed this as completed Nov 15, 2023
@looly
Copy link
Member

looly commented Nov 15, 2023

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

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

@looly looly added the question label Nov 15, 2023
@creekmoon
Copy link
Author

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

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

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

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

@CherryRum
Copy link
Collaborator

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

@creekmoon
Copy link
Author

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants