From dcc52413a76a03a4205e8b29b4a5fe4bf035b687 Mon Sep 17 00:00:00 2001 From: VampireAchao Date: Sun, 27 Feb 2022 22:26:45 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=8F=82=E8=80=83=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=EF=BC=8C=E6=8B=93=E5=B1=95?= =?UTF-8?q?Date=E4=BB=A5=E5=8F=8ADateTime=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/date/DateUtil.java | 16 +++++++++++++++ .../cn/hutool/core/date/DateUtilTest.java | 20 +++++++++++++++++++ 2 files changed, 36 insertions(+) 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 164855a09..f606510be 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 @@ -2161,6 +2161,22 @@ public class DateUtil extends CalendarUtil { } } + /** + * 检查两个时间段是否有时间重叠
+ * 重叠指两个时间段是否有交集 + * + * @param realStartTime 第一个时间段的开始时间 + * @param realEndTime 第一个时间段的结束时间 + * @param startTime 第二个时间段的开始时间 + * @param endTime 第二个时间段的结束时间 + * @return true 表示时间有重合 + * @since 5.7.20 + */ + public static boolean isOverlap(Date realStartTime, Date realEndTime, + Date startTime, Date endTime) { + return startTime.after(realEndTime) || endTime.before(realStartTime); + } + // ------------------------------------------------------------------------ Private method start /** 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 1e65175fb..b75ed7737 100644 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java @@ -1020,4 +1020,24 @@ public class DateUtilTest { final boolean isSameWeek2 = DateUtil.isSameWeek(DateTime.of("2021-12-29", "yyyy-MM-dd"), DateTime.of("2022-01-01", "yyyy-MM-dd"), true); Assert.assertTrue(isSameWeek2); } + + @Test + public void isOverlapTest() { + DateTime oneStartTime = DateTime.of("2022-01-01 10:10:10", DatePattern.NORM_DATETIME_PATTERN); + DateTime oneEndTime = DateTime.of("2022-01-01 11:10:10", DatePattern.NORM_DATETIME_PATTERN); + + DateTime oneStartTime2 = DateTime.of("2022-01-01 11:20:10", DatePattern.NORM_DATETIME_PATTERN); + DateTime oneEndTime2 = DateTime.of("2022-01-01 11:30:10", DatePattern.NORM_DATETIME_PATTERN); + + DateTime oneStartTime3 = DateTime.of("2022-01-01 11:40:10", DatePattern.NORM_DATETIME_PATTERN); + DateTime oneEndTime3 = DateTime.of("2022-01-01 11:50:10", DatePattern.NORM_DATETIME_PATTERN); + + //真实请假数据 + DateTime realStartTime = DateTime.of("2022-01-01 11:49:10", DatePattern.NORM_DATETIME_PATTERN); + DateTime realEndTime = DateTime.of("2022-01-01 12:00:10", DatePattern.NORM_DATETIME_PATTERN); + + Assert.assertTrue(DateUtil.isOverlap(oneStartTime, oneEndTime, realStartTime, realEndTime)); + Assert.assertTrue(DateUtil.isOverlap(oneStartTime2, oneEndTime2, realStartTime, realEndTime)); + Assert.assertFalse(DateUtil.isOverlap(oneStartTime3, oneEndTime3, realStartTime, realEndTime)); + } } From 9c3cf705c6bf29bf6ee1ed1552f23d8c04129c90 Mon Sep 17 00:00:00 2001 From: VampireAchao Date: Sun, 27 Feb 2022 22:29:42 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=8F=82=E8=80=83=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=EF=BC=8C=E6=8B=93=E5=B1=95?= =?UTF-8?q?Date=E4=BB=A5=E5=8F=8ADateTime=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/date/DateUtilTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) 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 fc7e6d8e7..5cf171134 100644 --- a/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/DateUtilTest.java @@ -1027,4 +1027,24 @@ public class DateUtilTest { final DateTime dateTime = DateUtil.parse("12:23:34"); Console.log(dateTime); } + + @Test + public void isOverlapTest() { + DateTime oneStartTime = DateTime.of("2022-01-01 10:10:10", DatePattern.NORM_DATETIME_PATTERN); + DateTime oneEndTime = DateTime.of("2022-01-01 11:10:10", DatePattern.NORM_DATETIME_PATTERN); + + DateTime oneStartTime2 = DateTime.of("2022-01-01 11:20:10", DatePattern.NORM_DATETIME_PATTERN); + DateTime oneEndTime2 = DateTime.of("2022-01-01 11:30:10", DatePattern.NORM_DATETIME_PATTERN); + + DateTime oneStartTime3 = DateTime.of("2022-01-01 11:40:10", DatePattern.NORM_DATETIME_PATTERN); + DateTime oneEndTime3 = DateTime.of("2022-01-01 11:50:10", DatePattern.NORM_DATETIME_PATTERN); + + //真实请假数据 + DateTime realStartTime = DateTime.of("2022-01-01 11:49:10", DatePattern.NORM_DATETIME_PATTERN); + DateTime realEndTime = DateTime.of("2022-01-01 12:00:10", DatePattern.NORM_DATETIME_PATTERN); + + Assert.assertTrue(DateUtil.isOverlap(oneStartTime, oneEndTime, realStartTime, realEndTime)); + Assert.assertTrue(DateUtil.isOverlap(oneStartTime2, oneEndTime2, realStartTime, realEndTime)); + Assert.assertFalse(DateUtil.isOverlap(oneStartTime3, oneEndTime3, realStartTime, realEndTime)); + } }