mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
!512 增加了判断时间段重合的方法
Merge pull request !512 from 爱花花/cherry-pick-1642598162
This commit is contained in:
commit
c143a61395
@ -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<LocalDateTime> realStartTime, Supplier<LocalDateTime> realEndTime, Supplier<LocalDateTime> startTime, Supplier<LocalDateTime> endTime) {
|
||||
return isOverlap(realStartTime.get(), realEndTime.get(), startTime.get(), endTime.get());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -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));
|
||||
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user