diff --git a/basic-util/src/main/java/ink/wgink/util/date/DateUtil.java b/basic-util/src/main/java/ink/wgink/util/date/DateUtil.java index b5a33088..f30741c2 100644 --- a/basic-util/src/main/java/ink/wgink/util/date/DateUtil.java +++ b/basic-util/src/main/java/ink/wgink/util/date/DateUtil.java @@ -1,5 +1,6 @@ package ink.wgink.util.date; +import ink.wgink.exceptions.ParamsException; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; @@ -504,4 +505,79 @@ public class DateUtil { public static String getDateTime(Date date) { return sdfTime.format(date); } + + /** + * 判断时间是否重叠 + * + * @param source 源时间 + * @param target 对比的时间 + * @return + */ + public static boolean isTimeOverlap(StartEndTime source, StartEndTime target) { + if (source == null) { + throw new ParamsException("源时间不能为空"); + } + if (StringUtils.isBlank(source.getStartTime()) || StringUtils.isBlank(source.getEndTime())) { + throw new ParamsException("源开始时间或结束时间不能为空"); + } + if (target == null) { + throw new ParamsException("目标时间不能为空"); + } + if (StringUtils.isBlank(target.getStartTime()) || StringUtils.isBlank(target.getEndTime())) { + throw new ParamsException("目标开始时间或结束时间不能为空"); + } + DateTime sourceStartDateTime = DateTime.parse(source.getStartTime(), DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")); + DateTime sourceEndDateTime = DateTime.parse(source.getEndTime(), DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")); + DateTime targetStartDateTime = DateTime.parse(target.getStartTime(), DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")); + DateTime targetEndDateTime = DateTime.parse(target.getEndTime(), DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")); + // 源开始时间在源结束时间之后,错误 + if (sourceStartDateTime.isAfter(sourceEndDateTime)) { + throw new ParamsException("源开始时间不能在源结束时间之后"); + } + // 目标开始时间在目标结束时间之后,错误 + if (targetStartDateTime.isAfter(targetEndDateTime)) { + throw new ParamsException("目标开始时间不能在目标结束时间之后"); + } + // 源开始时间在目标时间之后,不重叠 + if (sourceStartDateTime.isAfter(targetEndDateTime)) { + return false; + } + // 源结束时间在目标开始时间之前,不重叠 + if (sourceEndDateTime.isBefore(targetStartDateTime)) { + return false; + } + return true; + } + + /** + * 开始和结束时间 + */ + public static class StartEndTime { + private String startTime; + private String endTime; + + public StartEndTime() { + } + + public StartEndTime(String startTime, String endTime) { + this.startTime = startTime; + this.endTime = endTime; + } + + public String getStartTime() { + return startTime == null ? "" : startTime.trim(); + } + + public void setStartTime(String startTime) { + this.startTime = startTime; + } + + public String getEndTime() { + return endTime == null ? "" : endTime.trim(); + } + + public void setEndTime(String endTime) { + this.endTime = endTime; + } + } }