From 424803686e66038a9658923e14aa427fde25b661 Mon Sep 17 00:00:00 2001 From: GL Date: Wed, 19 Jan 2022 20:50:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=AF=B9=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=AE=B5=E9=87=8D=E5=90=88=E7=9A=84=E5=88=A4=E6=96=AD=E6=96=B9?= =?UTF-8?q?=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()); + } + + }