java比较时间两两之间是否有交集

简述: 公司做项目这么久了,发现好多业务都会涉及到有关时间的比较的场景,其中遇到了一个比较棘手的时间比较问题,那就是比较四个时间段,而且这两两之间的时间段可以跨天,不是单纯某一天的时间段比较,于是自己琢磨了一番,写下此文!

下面是一张时间比较的分析图:

在这里插入图片描述

注释:黑色表示 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 表示有交集

以上只是提供了一些思路,仅供参考,如有不妥的地方欢迎指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值