Java判斷多個(gè)時(shí)間段是否重合的方法小結(jié)
判斷多個(gè)時(shí)間段是否有間隔
實(shí)體類內(nèi)容
public class DateRangeStr { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM", timezone = "GMT+8") private String startDate;//格式:yyyy-MM-dd @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM", timezone = "GMT+8") private String endDate;//格式:yyyy-MM-dd }
主方法內(nèi)容
//判斷多個(gè)時(shí)間段是否有時(shí)間間隔 true無間隔 false有間隔 public boolean hasNoGaps(List<DateRangeStr> sortedStrRanges) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); if (sortedStrRanges == null || sortedStrRanges.size() <= 0) return false; if (sortedStrRanges.size() == 1) return true; List<DateRange> timePeriods = new ArrayList<>(); for (DateRangeStr ss : sortedStrRanges) { LocalDate startDate = LocalDate.parse(ss.getStartDate(), formatter); LocalDate endDate = LocalDate.parse(ss.getEndDate(), formatter); DateRange dr = new DateRange(); dr.setStartDate(startDate); dr.setEndDate(endDate); timePeriods.add(dr); } Collections.sort(timePeriods, Comparator.comparing(DateRange::getStartDate)); LocalDate previousEndDate = timePeriods.get(0).getEndDate(); for (int i = 1; i < timePeriods.size(); i++) { DateRange currentPeriod = timePeriods.get(i); if (previousEndDate.isAfter(currentPeriod.getStartDate())) { // 當(dāng)前時(shí)間段的開始日期早于上一個(gè)時(shí)間段的結(jié)束日期,存在重疊,這不一定是問題 // 但我們?nèi)匀粚?dāng)前時(shí)間段的結(jié)束日期作為新的previousEndDate previousEndDate = currentPeriod.getEndDate(); } else if ((!previousEndDate.isEqual(currentPeriod.getStartDate()) && !previousEndDate.plusDays(1L).isEqual(currentPeriod.getStartDate()))) { // 發(fā)現(xiàn)了間隔 return false; } else { // 相鄰時(shí)間段之間沒有間隔 previousEndDate = currentPeriod.getEndDate(); } } return true; // 所有時(shí)間段都已遍歷完畢,且沒有發(fā)現(xiàn)時(shí)間間隔 }
判斷時(shí)間段集合是否與某時(shí)間段重合
實(shí)體類內(nèi)容
public class TimeInterval { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM", timezone = "GMT+8") private String start; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM", timezone = "GMT+8") private String end; }
主方法內(nèi)容
private static YearMonth parseYearMonth(String input) { try { return YearMonth.parse(input, MONTH_FORMATTER); } catch (Exception e) { throw new IllegalArgumentException("Invalid date format: " + input, e); } } public static boolean overlapsOrContainedInIntervals(List<TimeInterval> intervals, String startDate,String endDate) { YearMonth yearMonthAStart = parseYearMonth(startDate); YearMonth yearMonthAEnd = parseYearMonth(endDate); for (TimeInterval interval : intervals) { YearMonth start = parseYearMonth(interval.getStart()); YearMonth end = parseYearMonth(interval.getEnd()); // 檢查重疊或包含 if (!start.isAfter(yearMonthAEnd) && !end.isBefore(yearMonthAStart)) { return true; } } return false; }
到此這篇關(guān)于Java判斷多個(gè)時(shí)間段是否重合的方法小結(jié)的文章就介紹到這了,更多相關(guān)Java判斷時(shí)間段是否重合內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA配置SpringBoot熱啟動(dòng),以及熱啟動(dòng)失效問題
這篇文章主要介紹了IDEA配置SpringBoot熱啟動(dòng),以及熱啟動(dòng)失效問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Java利用Redis實(shí)現(xiàn)消息隊(duì)列的示例代碼
本篇文章主要介紹了Java利用Redis實(shí)現(xiàn)消息隊(duì)列的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07詳解RSA加密算法的原理與Java實(shí)現(xiàn)
這篇文章主要和大家分享非對稱加密中的一種算法,那就是 RSA 加密算法。本文介紹了RSA算法的原理與Java實(shí)現(xiàn),感興趣的小伙伴可以嘗試一下2022-10-10Java 實(shí)戰(zhàn)項(xiàng)目之在線點(diǎn)餐系統(tǒng)的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)在線點(diǎn)餐系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11springboot動(dòng)態(tài)加載Echarts柱狀圖
這篇文章主要為大家詳細(xì)介紹了springboot動(dòng)態(tài)加載Echarts柱狀圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12淺談SpringBoot內(nèi)嵌Tomcat的實(shí)現(xiàn)原理解析
這篇文章主要介紹了淺談SpringBoot內(nèi)嵌Tomcat的實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12El表達(dá)式使用問題javax.el.ELException:Failed to parse the expression
今天小編就為大家分享一篇關(guān)于Jsp El表達(dá)式使用問題javax.el.ELException:Failed to parse the expression的解決方式,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12