最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java判斷多個時間段是否重合的方法小結(jié)

 更新時間:2025年02月23日 11:09:06   作者:骨力  
這篇文章主要為大家詳細(xì)介紹了Java中判斷多個時間段是否重合的方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

判斷多個時間段是否有間隔

實(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)容

//判斷多個時間段是否有時間間隔  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)前時間段的開始日期早于上一個時間段的結(jié)束日期,存在重疊,這不一定是問題
                // 但我們?nèi)匀粚?dāng)前時間段的結(jié)束日期作為新的previousEndDate
                previousEndDate = currentPeriod.getEndDate();
            } else if ((!previousEndDate.isEqual(currentPeriod.getStartDate()) && !previousEndDate.plusDays(1L).isEqual(currentPeriod.getStartDate()))) {
                // 發(fā)現(xiàn)了間隔
                return false;
            } else {
                // 相鄰時間段之間沒有間隔
                previousEndDate = currentPeriod.getEndDate();
            }
        }

        return true; // 所有時間段都已遍歷完畢,且沒有發(fā)現(xiàn)時間間隔
    }

判斷時間段集合是否與某時間段重合

實(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判斷多個時間段是否重合的方法小結(jié)的文章就介紹到這了,更多相關(guān)Java判斷時間段是否重合內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringMVC請求參數(shù)別名設(shè)置方式

    SpringMVC請求參數(shù)別名設(shè)置方式

    文章介紹了SpringMVC中請求參數(shù)的別名設(shè)置方法,通常,接收參數(shù)時要求參數(shù)名一致,通過@RequestParam注解的value屬性,可以為參數(shù)設(shè)置別名,實(shí)現(xiàn)參數(shù)名不一致時的準(zhǔn)確接收
    2025-10-10
  • java操作oracle數(shù)據(jù)庫示例

    java操作oracle數(shù)據(jù)庫示例

    這篇文章主要介紹了java操作oracle數(shù)據(jù)庫示例,需要的朋友可以參考下
    2014-04-04
  • Java?File類的概述及常用方法使用詳解

    Java?File類的概述及常用方法使用詳解

    Java?File類的功能非常強(qiáng)大,下面這篇文章主要給大家介紹了關(guān)于Java中File類的概述及常用方法使用,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • Java常用工具類匯總 附示例代碼

    Java常用工具類匯總 附示例代碼

    這篇文章主要介紹了Java常用工具類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著我來一起學(xué)習(xí)學(xué)習(xí)吧,希望能給你帶來幫助
    2021-06-06
  • SpringBoot項目中公共字段填充的實(shí)現(xiàn)

    SpringBoot項目中公共字段填充的實(shí)現(xiàn)

    本文主要介紹了SpringBoot項目中公共字段填充的實(shí)現(xiàn),利用SpringBoot的Aop思想和自定義注解和反射機(jī)制的方法來實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Java中@Async異步失效的9種場景

    Java中@Async異步失效的9種場景

    最近在項目某個方法使用@Async注解,但是該方法還是同步執(zhí)行了,異步不起作用,到底是什么原因呢?接下來本文給大家介紹了Java?@Async異步失效的9種場景,需要的朋友可以參考下
    2024-05-05
  • 淺談對java中鎖的理解

    淺談對java中鎖的理解

    本文主要講述java中鎖的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • 詳解MyBatis Generator自動創(chuàng)建代碼(dao,mapping,poji)

    詳解MyBatis Generator自動創(chuàng)建代碼(dao,mapping,poji)

    這篇文章主要介紹了詳解MyBatis Generator自動創(chuàng)建代碼(dao,mapping,poji)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • Maven Profile多環(huán)境構(gòu)建實(shí)戰(zhàn)指南

    Maven Profile多環(huán)境構(gòu)建實(shí)戰(zhàn)指南

    在現(xiàn)代企業(yè)級Java項目開發(fā)中,面對開發(fā)(dev)、測試(test)、預(yù)發(fā)布(staging)、生產(chǎn)(prod)等多套環(huán)境的差異化配置管理,本文將從實(shí)戰(zhàn)角度深入剖析Maven Profile的多環(huán)境構(gòu)建體系,需要的朋友可以參考下
    2025-05-05
  • 使用Idea快速搭建SpringMVC項目的詳細(xì)步驟記錄

    使用Idea快速搭建SpringMVC項目的詳細(xì)步驟記錄

    這篇文章主要給大家介紹了關(guān)于使用Idea快速搭建SpringMVC項目的詳細(xì)步驟,Spring?MVC是一種基于MVC模式的框架,它是Spring框架的一部分,它提供了一種更簡單和更有效的方式來構(gòu)建Web應(yīng)用程序,需要的朋友可以參考下
    2024-05-05

最新評論

资溪县| 卢氏县| 积石山| 和顺县| 无棣县| 合川市| 中宁县| 永仁县| 安化县| 游戏| 渭南市| 宁陕县| 连平县| 丹东市| 吴忠市| 无棣县| 教育| 东丰县| 钦州市| 米脂县| 莒南县| 宝兴县| 墨竹工卡县| 永年县| 南汇区| 武平县| 桑日县| 丹巴县| 邻水| 木里| 赞皇县| 买车| 湖口县| 沙雅县| 陆河县| 沙洋县| 全椒县| 青州市| 临漳县| 乐业县| 成安县|