最近业务上遇到需要判断两个时间段是否存在重叠的情况,网上找了不少代码。大佬们的思路过于简洁了,有些理解不了。还只是个菜鸟码农,还是多锻炼锻炼自己的思路。
思路很简单:定义一个时间段的概念,既然是时间段就包含起始时间和终止时间这两个时间点。构造方法要保证起始时间在终止时间之前,这样才是一个有效的时间段概念。
为时隙这个类定义四个比较先后顺序的方法,分别为:小于,大于,小于等于,大于等于。画张简单的时间线图理解一下就明白了。当整个时间段作为一个整体时,只有时间段小于或大于另一个时间段时,它们才没有重叠的交集。
代码如下,有什么错误还请各位看官帮忙指出
包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判断两个时间段是否重叠的案例