国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

java 判斷兩個時間段是否重疊的案例

瀏覽:4日期:2022-08-27 10:00:46

最近業務上遇到需要判斷兩個時間段是否存在重疊的情況,網上找了不少代碼。大佬們的思路過于簡潔了,有些理解不了。還只是個菜鳥碼農,還是多鍛煉鍛煉自己的思路。

思路很簡單:定義一個時間段的概念,既然是時間段就包含起始時間和終止時間這兩個時間點。構造方法要保證起始時間在終止時間之前,這樣才是一個有效的時間段概念。

為TimeSlot這個類定義四個比較先后順序的方法,分別為:小于、大于、小于等于、大于等于。畫張簡單的時間線圖理解一下就明白了。當整個時間段作為一個整體時,只有時間段小于或大于另一個時間段時,它們才沒有重疊的交集。

代碼如下,有什么錯誤還請各位看官幫忙指出

package com.abc.common.util;import lombok.Data;import org.springframework.stereotype.Component;import java.time.LocalDateTime;/** * 日期工具類 * <p> * 使用LocalDateTime存取或判斷 * </p> * @see java.time.LocalDateTime * @date 2020-6-29 10:20:42 */@Componentpublic class DateUtil { /** * 判斷兩個時間段是否重疊 * @param slot1 * @param slot2 * @return */ public static boolean overlapped(TimeSlot slot1, TimeSlot slot2) { TimeSlot previous, next; previous = slot1.startTime.isBefore(slot2.startTime) ? slot1 : slot2; next = slot2.startTime.isAfter(slot1.startTime) ? slot2 : slot1; // 這里業務需要,允許時間點的重疊 // 例如某個時間段的起始時間:2020-06-29 00:00:00 // 和另一個時間段的終止時間:2020-06-29 00:00:00 // 它們倆可以有交點。如果不需要這種邏輯只把le改成lt // ,ge改成gt就可 return !(le(previous, next) || ge(previous, next)); } /** * 構造一個時間段 * @param startTime * @param endTime * @return */ public static TimeSlot buildSlot(LocalDateTime startTime, LocalDateTime endTime) { return new TimeSlot(startTime, endTime); } /** * less equal * 小于等于 * @param prev * @param next * @return */ private static boolean le(TimeSlot prev, TimeSlot next) { return lt(prev, next) || next.endTime.isEqual(prev.startTime); } /** * greater equal * 大于等于 * @param prev * @param next * @return */ private static boolean ge(TimeSlot prev, TimeSlot next) { return gt(prev, next) || prev.endTime.isEqual(next.startTime); } /** * greater than * 大于 * @param prev * @param next * @return */ private static boolean gt(TimeSlot prev, TimeSlot next) { return prev.endTime.isBefore(next.startTime); } /** * less than * 小于 * @param prev * @param next * @return */ private static boolean lt(TimeSlot prev, TimeSlot next) { return next.endTime.isBefore(prev.startTime); } /** * 時間段類 */ @Data static class TimeSlot{ private LocalDateTime startTime; private LocalDateTime endTime; public TimeSlot(LocalDateTime startTime, LocalDateTime endTime) { if (startTime.isAfter(endTime)) {this.startTime = endTime;this.endTime = startTime; } else {this.startTime = startTime;this.endTime = endTime; } } }}

在業務代碼中調用:

// ... if (DateUtil.overlapped( DateUtil.buildSlot(beginTime, endTime), DateUtil.buildSlot(beginTime1, endTime1) )) { // 時間段有重疊,寫下重疊情況的業務代碼 }// ...

當然也可以把TimeSlot這個類拎出來,那樣或許更方便。

補充知識:Java計算Date類時間差的函數

我就廢話不多說了,大家還是直接看代碼吧~

public static String TimeDifference(long start, long end) { long between = end - start; long day = between / (24 * 60 * 60 * 1000); long hour = (between / (60 * 60 * 1000) - day * 24); long min = ((between / (60 * 1000)) - day * 24 * 60 - hour * 60); long s = (between / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60); long ms = (between - day * 24 * 60 * 60 * 1000 - hour * 60 * 60 * 1000- min * 60 * 1000 - s * 1000); String timeDifference = day + '天' + hour + '小時' + min + '分' + s + '秒' + ms+ '毫秒'; return timeDifference; }

以上這篇java 判斷兩個時間段是否重疊的案例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: a久久99精品久久久久久不 | 日本无卡码免费一区二区三区 | a级毛片免费高清视频 | 精品国产免费第一区二区三区日韩 | 国产丶欧美丶日韩丶不卡影视 | 国产三级观看 | 成人亚洲天堂 | 亚洲成a v人片在线观看 | 久久福利国产 | bt天堂午夜国产精品 | 91av观看 | 一级做a爱视频 | 日韩精品一区二区三区高清 | 欧美精品在线视频观看 | 久久久久久九九 | a级免费网站| 午夜精品同性女女 | 国产成人精品免费视频大全可播放的 | 欧美日韩国产一区三区 | 69精品免费视频 | 欧美一级aa天码毛片 | 欧美亚洲国产精品久久久久 | 性感美女一级毛片 | 韩国一级永久免费观看网址 | 国产欧美日韩在线观看一区二区三区 | 国产片久久 | 99毛片| 美女三级毛片 | 99re热精品这里精品 | 国产精品久久久久久久毛片 | 久久久不卡国产精品一区二区 | 午夜嘿咻 | 亚州免费视频 | 久久视频免费 | 1级黄色毛片 | 国产午夜精品免费一二区 | 日韩欧美在线精品 | 免费观看性欧美一级 | 久久免费视频网站 | 一级成人毛片免费观看欧美 | 欧美成人性色大片在线观看 |