From 41651781b163bb74778bae4219efa165abd271fc Mon Sep 17 00:00:00 2001 From: GL Date: Wed, 19 Jan 2022 20:50:11 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fixed=20178b994=20from=20https://gitee.com/?= =?UTF-8?q?huahua522/hutool/pulls/511=20fixed=204248036=20from=20https://g?= =?UTF-8?q?itee.com/huahua522/hutool/pulls/509=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AF=B9=E6=97=B6=E9=97=B4=E6=AE=B5=E9=87=8D=E5=90=88=E7=9A=84?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hutool/core/date/LocalDateTimeUtil.java | 50 +++++++++++++------ 1 file changed, 35 insertions(+), 15 deletions(-) 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 f41d4e781..ccb063c96 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,24 +5,13 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; -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.*; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; -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.time.temporal.*; import java.util.Date; import java.util.TimeZone; +import java.util.function.Supplier; /** * JDK8+中的{@link LocalDateTime} 工具类封装 @@ -493,7 +482,7 @@ public class LocalDateTimeUtil { * @since 5.7.18 */ public static LocalDateTime endOfDay(LocalDateTime time, boolean truncateMillisecond) { - if(truncateMillisecond){ + if (truncateMillisecond) { return time.with(LocalTime.of(23, 59, 59)); } return time.with(LocalTime.MAX); @@ -544,4 +533,35 @@ public class LocalDateTimeUtil { public static Week dayOfWeek(LocalDate localDate) { return Week.of(localDate.getDayOfWeek()); } + + /** + * 第二个事件段是否在第一个时间段的内部 + * 需要注意的是比如第一个时间段的结尾是23:59:59 第二天开始需要是00:00:00 相同也是重复 + * + * @param realStartTime 第一个时间段的开始时间 + * @param realEndTime 第一个时间段的结束时间 + * @param startTime 第二个时间段的开始时间 + * @param endTime 第二个时间段的结束时间 + * @return true 表示时间有重合 + */ + public static boolean isOverlap(LocalDateTime realStartTime, LocalDateTime realEndTime, LocalDateTime startTime, LocalDateTime 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()); + } + + } From 03657b2eaf0006119d35e52b9c1352805b789fc3 Mon Sep 17 00:00:00 2001 From: GL Date: Wed, 19 Jan 2022 20:58:06 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fixed=20c592aa6=20from=20https://gitee.com/?= =?UTF-8?q?huahua522/hutool/pulls/511=20fixed=20d6b78ed=20from=20https://g?= =?UTF-8?q?itee.com/huahua522/hutool/pulls/509=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=AF=B9=E6=97=B6=E9=97=B4=E6=AE=B5=E9=87=8D=E5=90=88=E7=9A=84?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E6=96=B9=E6=B3=95=20=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/date/LocalDateTimeUtilTest.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) 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 f8455b941..ed835e123 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 @@ -177,4 +177,33 @@ public class LocalDateTimeUtilTest { final Week seven = LocalDateTimeUtil.dayOfWeek(LocalDate.of(2021, 9, 26)); Assert.assertEquals(Week.SUNDAY, seven); } + + @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); + + Assert.assertTrue(LocalDateTimeUtil.isOverlap(oneStartTime,oneEndTime,realStartTime,realEndTime)); + Assert.assertTrue(LocalDateTimeUtil.isOverlap(oneStartTime2,oneEndTime2,realStartTime,realEndTime)); + Assert.assertFalse(LocalDateTimeUtil.isOverlap(oneStartTime3,oneEndTime3,realStartTime,realEndTime)); + + } }