From b9df76f92c3bedca70669f6269d80b42471304d2 Mon Sep 17 00:00:00 2001 From: Looly Date: Thu, 20 Jan 2022 10:21:20 +0800 Subject: [PATCH] add method --- CHANGELOG.md | 1 + .../hutool/core/date/LocalDateTimeUtil.java | 42 +++++++++---------- .../core/date/LocalDateTimeUtilTest.java | 9 ---- 3 files changed, 21 insertions(+), 31 deletions(-) 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)); - } }