From 6e86079e7e246f4c1f44627533cec3957b6f6e2d Mon Sep 17 00:00:00 2001 From: Looly Date: Tue, 22 Mar 2022 19:02:44 +0800 Subject: [PATCH] fix bug --- CHANGELOG.md | 1 + hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java | 3 +++ .../src/main/java/cn/hutool/core/date/LocalDateTimeUtil.java | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e12e65098..fc41ddc8e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ * 【json 】 修复JSON对Map.Entry的解析问题 * 【core 】 修复MapConverter中map与map转换兼容问题 * 【poi 】 解决sax读取时,POI-5.2.x兼容性问题 +* 【core 】 修复修复判断两段时间区间交集问题(pr#2210@Github) ------------------------------------------------------------------------------------------------------------- # 5.7.22 (2022-03-01) diff --git a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java index 76841f5c8..dc69d9c3b 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java @@ -2197,6 +2197,9 @@ public class DateUtil extends CalendarUtil { public static boolean isOverlap(Date realStartTime, Date realEndTime, Date startTime, Date endTime) { + // x>b||a>y 无交集 + // 则有交集的逻辑为 !(x>b||a>y) + // 根据德摩根公式,可化简为 x<=b && a<=y return startTime.before(realEndTime) && endTime.after(realStartTime); } diff --git a/hutool-core/src/main/java/cn/hutool/core/date/LocalDateTimeUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/LocalDateTimeUtil.java index 2bf8462c9..1e8599ae4 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/LocalDateTimeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/LocalDateTimeUtil.java @@ -564,6 +564,10 @@ public class LocalDateTimeUtil { */ public static boolean isOverlap(ChronoLocalDateTime realStartTime, ChronoLocalDateTime realEndTime, ChronoLocalDateTime startTime, ChronoLocalDateTime endTime) { + + // x>b||a>y 无交集 + // 则有交集的逻辑为 !(x>b||a>y) + // 根据德摩根公式,可化简为 x<=b && a<=y return startTime.isBefore(realEndTime) && endTime.isAfter(realStartTime); }