diff --git a/CHANGELOG.md b/CHANGELOG.md
index 50c167159..add6a54a5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -15,6 +15,7 @@
* 【core 】 在CollectorUtil提交Collectors.toMap的对null友好实现,避免NPE(pr#502@Gitee)
* 【http 】 增加HttpGlobalConfig.setIgnoreEOFError(issue#2092@Github)
* 【core 】 RandomUtil.randomStringWithoutStr排除字符串兼容大写字母(pr#503@Gitee)
+* 【core 】 LocalDateTime增加isOverlap方法(pr#512@Gitee)
*
### 🐞Bug修复
* 【core 】 修复setter重载导致匹配错误(issue#2082@Github)
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 ccb063c96..102fdff4e 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
@@ -5,13 +5,25 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.ReUtil;
import cn.hutool.core.util.StrUtil;
-import java.time.*;
+import java.time.DayOfWeek;
+import java.time.Duration;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.Period;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.chrono.ChronoLocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
-import java.time.temporal.*;
+import java.time.temporal.ChronoField;
+import java.time.temporal.ChronoUnit;
+import java.time.temporal.Temporal;
+import java.time.temporal.TemporalAccessor;
+import java.time.temporal.TemporalUnit;
import java.util.Date;
import java.util.TimeZone;
-import java.util.function.Supplier;
/**
* JDK8+中的{@link LocalDateTime} 工具类封装
@@ -535,33 +547,19 @@ public class LocalDateTimeUtil {
}
/**
- * 第二个事件段是否在第一个时间段的内部
- * 需要注意的是比如第一个时间段的结尾是23:59:59 第二天开始需要是00:00:00 相同也是重复
+ * 检查两个时间段是否有时间重叠
+ * 重叠指两个时间段是否有交集
*
* @param realStartTime 第一个时间段的开始时间
* @param realEndTime 第一个时间段的结束时间
* @param startTime 第二个时间段的开始时间
* @param endTime 第二个时间段的结束时间
* @return true 表示时间有重合
+ * @since 5.7.20
*/
- public static boolean isOverlap(LocalDateTime realStartTime, LocalDateTime realEndTime, LocalDateTime startTime, LocalDateTime endTime) {
+ public static boolean isOverlap(ChronoLocalDateTime> realStartTime, ChronoLocalDateTime> realEndTime,
+ ChronoLocalDateTime> startTime, ChronoLocalDateTime> endTime) {
return startTime.isAfter(realEndTime) || endTime.isBefore(realStartTime);
}
- /**
- * jdk新特新的支持,并没发现什么场合,因为拿不到泛型
- * 第二个事件段是否在第一个时间段的内部
- * 需要注意的是比如第一个时间段的结尾是23:59:59 第二天开始需要是00:00:00 相同也是重复
- *
- * @param realStartTime 第一个时间段的开始时间
- * @param realEndTime 第一个时间段的结束时间
- * @param startTime 第二个时间段的开始时间
- * @param endTime 第二个时间段的结束时间
- * @return true 表示没有时间有重合
- */
- public static boolean isOverlap(Supplier realStartTime, Supplier realEndTime, Supplier startTime, Supplier endTime) {
- return isOverlap(realStartTime.get(), realEndTime.get(), startTime.get(), endTime.get());
- }
-
-
}
diff --git a/hutool-core/src/test/java/cn/hutool/core/date/LocalDateTimeUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/LocalDateTimeUtilTest.java
index ed835e123..8f35c59a5 100644
--- a/hutool-core/src/test/java/cn/hutool/core/date/LocalDateTimeUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/date/LocalDateTimeUtilTest.java
@@ -180,23 +180,15 @@ public class LocalDateTimeUtilTest {
@Test
public void isOverlapTest(){
-
-
LocalDateTime oneStartTime = LocalDateTime.of(2022, 1, 1, 10, 10, 10);
LocalDateTime oneEndTime = LocalDateTime.of(2022, 1, 1, 11, 10, 10);
-
-
LocalDateTime oneStartTime2 = LocalDateTime.of(2022, 1, 1, 11, 20, 10);
LocalDateTime oneEndTime2 = LocalDateTime.of(2022, 1, 1, 11, 30, 10);
-
-
LocalDateTime oneStartTime3 = LocalDateTime.of(2022, 1, 1, 11, 40, 10);
LocalDateTime oneEndTime3 = LocalDateTime.of(2022, 1, 1, 11, 50, 10);
-
-
//真实请假数据
LocalDateTime realStartTime = LocalDateTime.of(2022, 1, 1, 11, 49, 10);
LocalDateTime realEndTime = LocalDateTime.of(2022, 1, 1, 12, 0, 10);
@@ -204,6 +196,5 @@ public class LocalDateTimeUtilTest {
Assert.assertTrue(LocalDateTimeUtil.isOverlap(oneStartTime,oneEndTime,realStartTime,realEndTime));
Assert.assertTrue(LocalDateTimeUtil.isOverlap(oneStartTime2,oneEndTime2,realStartTime,realEndTime));
Assert.assertFalse(LocalDateTimeUtil.isOverlap(oneStartTime3,oneEndTime3,realStartTime,realEndTime));
-
}
}