Java时间冲突判断

最近碰到一个需求,要求新的起始时间和终止时间不能与之前拥有的时间冲突,也就是不能重合,不能有交集,不能相等。

首先我们要定义一个类,里面有开始时间和结束时间

public class TimeRange {

    private Date startTime;
    private Date endTime;

    public Date getStartTime() {
        return startTime;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    public Date getEndTime() {
        return endTime;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;

    }
}

之后我们需要查询出之前拥有的开始时间和结束时间,把这两个时间写入进一个list中。把新获取的时间放入一个对象中

TimeRange targetTimeRange = new TimeRange();
targetTimeRange.setStartTime(newStartTime);
targetTimeRange.setEndTime(newEndTime);

最后调用方法

private static boolean isTimeConflict(TimeRange targetTimeRange, List<TimeRange> timeRanges) {
        // 获取当前时间
        Date currentTime = new Date();
        // 检查目标时间段的起始时间是否小于当前时间
        if (targetTimeRange.getStartTime().before(currentTime)) {
            // 目标时间段的起始时间小于当前时间,表示冲突
            return true;
        }
        for (TimeRange timeRange : timeRanges) {
            // 时间段1的开始时间、结束时间,新的时间
            Date startTime1 = targetTimeRange.getStartTime();
            Date endTime1 = targetTimeRange.getEndTime();

            // 时间段2的开始时间、结束时间
            Date startTime2 = timeRange.getStartTime();
            Date endTime2 = timeRange.getEndTime();

            // 判断时间是否相互冲突、存在交集或完全重合的逻辑
            if ((startTime1.before(endTime2) && endTime1.after(startTime2)) ||
                    (startTime2.before(endTime1) && endTime2.after(startTime1)) ||
                    (startTime1.equals(startTime2) && endTime1.equals(endTime2))) {
                // 时间段相互冲突、存在交集或完全重合
                return true;
            }
        }
        // 时间段不相互冲突、不存在交集或完全重合
        return false;
    }

我这里用的是for循环,如果觉得这个效率太低可以采用其他方法。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值