增加了判断时间重叠的方法

This commit is contained in:
wanggeng 2022-06-10 01:07:53 +08:00
parent fcdd4a5b9d
commit 55f39f4bff

View File

@ -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;
}
}
}