简述: 公司做项目这么久了,发现好多业务都会涉及到有关时间的比较的场景,其中遇到了一个比较棘手的时间比较问题,那就是比较四个时间段,而且这两两之间的时间段可以跨天,不是单纯某一天的时间段比较,于是自己琢磨了一番,写下此文!
下面是一张时间比较的分析图:
注释:黑色表示 start1 和 end1 (start1 小于 end1),红色 start2 和 end2 (start2 小于 end2) 表示 跟黑色有多种交集的情况。
附上代码:
①、比较日期是否有交集:
public static Boolean intersectOfDate(LocalDate start1, LocalDate end1, LocalDate start2, LocalDate end2){
if (start1.isBefore(start2)){
if (start2.isBefore(end1)){
return Boolean.TRUE;
}
}
if (start1.isBefore(end2)){
if (end2.isBefore(end1)){
return Boolean.TRUE;
}
}
if (start2.isBefore(start1)){
if (end1.isBefore(end2)){
return Boolean.TRUE;
}
}
if (start1.equals(start2)){
if (end1.equals(end2)){
return Boolean.TRUE;
}
}
return Boolean.FALSE;
}
②、比较时间是否有交集:
public Boolean intersectOfTime(Date start1, Date end1, Date start2, Date end2){
if (start1.before(start2) && start2.before(end1)){
return Boolean.TRUE;
}else if (start1.before(end2) && end2.before(end1)){
return Boolean.TRUE;
}else if (start2.before(start1) && end1.before(end2)){
return Boolean.TRUE;
}else if (start1.equals(start2) && end1.equals(end2)){
return Boolean.TRUE;
}
return Boolean.FALSE;
}
返回 true 表示有交集
以上只是提供了一些思路,仅供参考,如有不妥的地方欢迎指正,谢谢!