在最近的一次需求中,其中有一段这个需求,判断两个时间段是否含有交集,若有则进行A操作,没有则进行B操作,需求很简单,其中这个判断的逻辑可以给大家参考
代码public class DateOverlap {
public boolean hasOverlap(Date leftStartDate, Date leftEndDate, Date rightStartDate, Date rightEndDate) {
return ((leftStartDate.getTime() >= rightStartDate.getTime())
&& leftStartDate.getTime() < rightEndDate.getTime())
||
((leftStartDate.getTime() > rightStartDate.getTime())
&& leftStartDate.getTime() <= rightEndDate.getTime())
||
((rightStartDate.getTime() >= leftStartDate.getTime())
&& rightStartDate.getTime() < leftEndDate.getTime())
||
((rightStartDate.getTime() > leftStartDate.getTime())
&& rightStartDate.getTime() <= leftEndDate.getTime());
}
public static void main(String[] args) {
DateOverlap dateOverlap = new DateOverlap();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String leftStart = "2021-12-20 12:00:00";
String leftEnd = "2021-12-22 12:00:00";
String rightStart = "2021-12-21 12:00:00";
String rightEnd = "2021-12-23 12:00:00";
try {
Date leftStartDate = simpleDateFormat.parse(leftStart);
Date leftEndDate = simpleDateFormat.parse(leftEnd);
Date rightStartDate = simpleDateFormat.parse(rightStart);
Date rightEndDate = simpleDateFormat.parse(rightEnd);
// 判断是否有交集
boolean b = dateOverlap.hasOverlap(leftStartDate, leftEndDate, rightStartDate, rightEndDate);
System.out.println("是否有交集 = " + b);
} catch (ParseException e) {
throw new RuntimeException("时间类型转换失败");
}
}
}
总结
代码开箱即用,大家可自行测试,希望能帮助到大家



