java判断两个时间段是否重叠的案例

  

最近业务上遇到需要判断两个时间段是否存在重叠的情况,网上找了不少代码。大佬们的思路过于简洁了,有些理解不了。还只是个菜鸟码农,还是多锻炼锻炼自己的思路。

  

思路很简单:定义一个时间段的概念,既然是时间段就包含起始时间和终止时间这两个时间点。构造方法要保证起始时间在终止时间之前,这样才是一个有效的时间段概念。

  

为时隙这个类定义四个比较先后顺序的方法,分别为:小于,大于,小于等于,大于等于。画张简单的时间线图理解一下就明白了。当整个时间段作为一个整体时,只有时间段小于或大于另一个时间段时,它们才没有重叠的交集。

  

代码如下,有什么错误还请各位看官帮忙指出

           包com.abc.common.util;      进口lombok.Data;   进口org.springframework.stereotype.Component;      进口java.time.LocalDateTime;/* *   *日期工具类   * & lt; p>   *使用LocalDateTime存取或判断   * & lt;/p>   * @see java.time.LocalDateTime   * @date 2020-6-29 10:20:42   */@ component   公开课DateUtil {/* *   *判断两个时间段是否重叠   * @param单曲   * @param slot2   * @return   */公共静态布尔重叠(时隙单曲,时隙slot2) {   时隙之前,下一个;   以前=slot1.startTime.isBefore (slot2.startTime) & # 63;单曲:slot2;   下一个=slot2.startTime.isAfter (slot1.startTime) & # 63;slot2:单曲;//这里业务需要,允许时间点的重叠//例如某个时间段的起始时间:2020-06-29就是//和另一个时间段的终止时间:2020-06-29就是//它们俩可以有交点。如果不需要这种逻辑只把le改成lt//,通用电气改成gt就可   返回! (le(之前,下一个)| |通用电气(之前,下一个));   }/* *   *构造一个时间段   * @param开始时间   * @param endTime   * @return   */公共静态时隙buildSlot (LocalDateTime开始时间,LocalDateTime endTime) {   返回新的时隙(开始时间、endTime);   }/* *   *不平等   *小于等于   * @param上一页   * @param下   * @return   */私有静态布尔勒(时隙上一页,时隙下){   返回lt(上一页,下一页)| | next.endTime.isEqual (prev.startTime);   }/* *   *更大的平等   *大于等于   * @param上一页   * @param下   * @return   */私有静态布尔通用电气(时隙上一页,时隙下){   返回gt(上一页,下一页)| | prev.endTime.isEqual (next.startTime);   }/* *   *大于   *大于   * @param上一页   * @param下   * @return   */私有静态布尔gt(时隙上一页,时隙下){   返回prev.endTime.isBefore (next.startTime);   }/* *   *不到   *小于   * @param上一页   * @param下   * @return   */私有静态布尔lt(时隙上一页,时隙下){   返回next.endTime.isBefore (prev.startTime);   }/* *   *时间段类   */@ data   静态类时隙{   私人LocalDateTime开始时间;   私人LocalDateTime endTime;      公共时隙(LocalDateTime开始时间,LocalDateTime endTime) {   如果(startTime.isAfter (endTime)) {   这一点。开始时间=endTime;   这一点。endTime=开始时间;   其他}{   这一点。开始时间=开始时间;   这一点。endTime=endTime;   }   }   }   }   之前      

在业务代码中调用:

     //?   如果(DateUtil.overlapped (   DateUtil。buildSlot (beginTime endTime),   DateUtil。buildSlot (beginTime1 endTime1)   )){//时间段有重叠,写下重叠情况的业务代码   }//?/pre>         

当然也可以把时隙这个类拎出来,那样或许更方便。

  

<强> Java计算日期类时间差的函数

  

我就废话不多说了,大家还是直接看代码吧~

        公共静态字符串TimeDifference(长开始,结束){      长=结束-开始;   漫长的一天=之间/(24 * 60 * 60 * 1000);   之间的长时间=((60 * 60 * 1000)/天* 24);   长最小值=((/(60 * 1000))之间的天* 24 * 60 * 60小时);   间长s=(/1000天* 24 * 60 * 60小时* 60 * 60 - min * 60);   长之间的女士=(天* 24 * 60 * 60 * 1000 * 60 * 60 * 1000 -小时   - min * 60 * 1000 * 1000);   字符串timeDifference=天+“天”+小时+“小”时+分钟+ + s“分”+“秒”+女士   +”毫秒”;   返回timeDifference;   }               

以上这篇java判断两个时间段是否重叠的案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

java判断两个时间段是否重叠的案例