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 ac09b1f38..225fff071 100755 --- a/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java @@ -1995,13 +1995,19 @@ public class DateUtil extends CalendarUtil { /** * 检查两个时间段是否有时间重叠
- * 重叠指两个时间段是否有交集 + * 重叠指两个时间段是否有交集,注意此方法时间段重合时如: + * + * See 准确的区间关系参考:艾伦区间代数 * * @param realStartTime 第一个时间段的开始时间 * @param realEndTime 第一个时间段的结束时间 * @param startTime 第二个时间段的开始时间 * @param endTime 第二个时间段的结束时间 - * @return true 表示时间有重合 + * @return true 表示时间有重合或包含或相等 * @since 5.7.22 */ public static boolean isOverlap(final Date realStartTime, final Date realEndTime, @@ -2009,8 +2015,8 @@ public class DateUtil extends CalendarUtil { // x>b||a>y 无交集 // 则有交集的逻辑为 !(x>b||a>y) - // 根据德摩根公式,可化简为 x<=b && a<=y - return startTime.before(realEndTime) && endTime.after(realStartTime); + // 根据德摩根公式,可化简为 x<=b && a<=y 即 realStartTime<=endTime && startTime<=realEndTime + return realStartTime.compareTo(endTime) <=0 && startTime.compareTo(realEndTime) <= 0; } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java index a849bdab3..c99ea1e15 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java @@ -495,7 +495,13 @@ public class TimeUtil extends TemporalAccessorUtil { /** * 检查两个时间段是否有时间重叠
- * 重叠指两个时间段是否有交集 + * 重叠指两个时间段是否有交集,注意此方法时间段重合时如: + * + * See 准确的区间关系参考:艾伦区间代数 * * @param realStartTime 第一个时间段的开始时间 * @param realEndTime 第一个时间段的结束时间 @@ -509,8 +515,8 @@ public class TimeUtil extends TemporalAccessorUtil { // x>b||a>y 无交集 // 则有交集的逻辑为 !(x>b||a>y) - // 根据德摩根公式,可化简为 x<=b && a<=y - return startTime.isBefore(realEndTime) && endTime.isAfter(realStartTime); + // 根据德摩根公式,可化简为 x<=b && a<=y 即 realStartTime<=endTime && startTime<=realEndTime + return realStartTime.compareTo(endTime) <=0 && startTime.compareTo(realEndTime) <= 0; } /** diff --git a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java index 3adc51deb..f40dfd505 100755 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java @@ -1054,6 +1054,11 @@ public class DateUtilTest { Assert.assertFalse(DateUtil.isOverlap(realStartTime1,realEndTime1,startTime,endTime)); Assert.assertFalse(DateUtil.isOverlap(startTime,endTime,realStartTime1,realEndTime1)); + + Assert.assertTrue(DateUtil.isOverlap(startTime,startTime,startTime,startTime)); + Assert.assertTrue(DateUtil.isOverlap(startTime,startTime,startTime,endTime)); + Assert.assertFalse(DateUtil.isOverlap(startTime,startTime,endTime,endTime)); + Assert.assertTrue(DateUtil.isOverlap(startTime,endTime,endTime,endTime)); } @Test diff --git a/hutool-core/src/test/java/cn/hutool/core/date/TimeUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/TimeUtilTest.java index 1879afb6f..c03bd0c76 100644 --- a/hutool-core/src/test/java/cn/hutool/core/date/TimeUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/TimeUtilTest.java @@ -208,6 +208,11 @@ public class TimeUtilTest { Assert.assertFalse(TimeUtil.isOverlap(realStartTime1,realEndTime1,startTime,endTime)); Assert.assertFalse(TimeUtil.isOverlap(startTime,endTime,realStartTime1,realEndTime1)); + + Assert.assertTrue(TimeUtil.isOverlap(startTime,startTime,startTime,startTime)); + Assert.assertTrue(TimeUtil.isOverlap(startTime,startTime,startTime,endTime)); + Assert.assertFalse(TimeUtil.isOverlap(startTime,startTime,endTime,endTime)); + Assert.assertTrue(TimeUtil.isOverlap(startTime,endTime,endTime,endTime)); } @Test