国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

hutool日期工具類相關:獲取某月所有周、某周的起止時間或所有日期、計算連續(xù)天數

這篇具有很好參考價值的文章主要介紹了hutool日期工具類相關:獲取某月所有周、某周的起止時間或所有日期、計算連續(xù)天數。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

最近做項目,碰到一個比較復雜的日期查詢方式,在這里記錄一下,方便以后忘了隨時能查到。
像我們一般查詢日期,頁面上用的日期選擇器,一般都是直接查某一天或者選擇開始、結束時間,查一個范圍。不過這次需要我們按某月的某周來查詢,比如頁面上直接顯示這個月有幾周,然后選第一周就直接傳第一周給后端。(如下面這種方式)
hutool獲取近七天時間,工具類,java,開發(fā)語言
因此,我們要先計算這個月有幾周,然后計算每周的起止時間,放到一個map中,通過前端傳過來的第幾周直接去map中拿。

實現

要計算起止時間,建議先引入hutool依賴,更方便。

<!-- hutool工具類 -->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.11</version>
</dependency>

1、獲取當月的所有周

第一步,我們要先獲得這個月的所有周。這個不是按照每周七天算的,比如2023.1月,它的第一周是1號,最后一周是30、31號。像這種情況它不一定每周都有七天,這一周只有一天、兩天也是算一周的。而不是直接按照這個月有多少天直接除以7天這么算的。

hutool獲取近七天時間,工具類,java,開發(fā)語言

/**
 * 獲取當前月的所有周
 */
public List<String> monthWeekNum(){
    // DateUtil是hutool的類
    DateTime end = DateUtil.endOfMonth(new Date()); // 獲取本月最后一天
    int weekNum = DateUtil.weekOfMonth(end); // 獲取本月最后一天在第幾周
    List<String> list = new ArrayList<>();
    for (int i = 1; i <= weekNum; i++) {
        list.add("第"+i+"周");
    }
    return list;
}

2、根據指定的第幾周,獲取這周的開始、結束時間

拿到了本月有幾周,第二步就計算每周的開始、結束日期。

/**
 * 根據指定的第幾周,獲取這周的開始、結束時間
 * @param week 第幾周(比如第1周、第2周)
 */
public static String[] getStartEndOfWeek(String week){
    // 如果沒有傳week,則默認查詢當前周的開始、結束時間
    if (StrUtil.isEmpty(week)){
        String[] result = new String[2];
        Date date = new Date();
        // 獲取本周的開始時間和結束時間
        result[0] = DateUtil.beginOfWeek(date).toString("yyyy-MM-dd");
        result[1] = DateUtil.endOfWeek(date).toString("yyyy-MM-dd");
        return result;
    }
    int weekNo = Integer.parseInt(week.replace("第", "").replace("周", ""));
    String weekOfDate = getWeekOfDate(weekNo);
    return weekOfDate.split(",");
}

/**
 * 指定周數,獲取當前月本周的開始、結束時間
 * @param weekNo 第幾周
 */
public static String getWeekOfDate(int weekNo) {
    Date date = new Date();
    DateTime start = DateUtil.beginOfMonth(date); // 獲取本月的第一天
    DateTime end = DateUtil.endOfMonth(date); // 獲取本月最后一天
    String weekOfDate = getWeekOfDate(start, end,weekNo);
    return weekOfDate;
}

/**
 * 指定時間計算有幾周,并返回每周起止日期
 * @param start 開始時間(本月第一天)
 * @param end 結束時間(本月最后一天)
 * @param weekNo 第幾周
 */
public static String getWeekOfDate(Date start, Date end,int weekNo) {
    Map<Integer, String> weekOfDate = getWeekOfDate(start, end);
    return weekOfDate.get(weekNo);
}

/**
 * 指定時間計算有幾周,并返回每周起止日期(這里也可以不用放到map中,直接返回某一周的起止時間就行)
 * @param start 開始時間
 * @param end 結束時間
 * @return week:第幾周 start:每周開始時間 end:每周結束時間
 */
public static  Map<Integer, String> getWeekOfDate(Date start, Date end) {
    Map<Integer, String> result = new HashMap<>();
    StringBuffer sb = null;
    assert end != null;
    assert start != null;
    int weekNum = DateUtil.weekOfMonth(end); // 獲取本月最后一天在第幾周
    System.out.println("指定日期所在月共有 "+weekNum+" 周");

    Calendar cal = Calendar.getInstance();
    // 設置一個星期的第一天,按中國的習慣一個星期的第一天是星期一
    cal.setFirstDayOfWeek(Calendar.MONDAY);
    cal.setTime(start);
    // 獲得當前日期是一個星期的第幾天
    int dayWeek = cal.get(Calendar.DAY_OF_WEEK);
    if (1 == dayWeek) {
        cal.add(Calendar.DAY_OF_MONTH, -1);
    }
    for (int i = 1; i <= weekNum; i++) {
        sb = new StringBuffer();
        if (i == 1) {//第一周以 start 開始
            sb.append(DateUtil.format(start,"yyyy-MM-dd"));
        }else {
            sb.append(DateUtil.format(cal.getTime(),"yyyy-MM-dd"));
        }
        sb.append(",");
        if (i == weekNum) {//最后一周以 end 結束
            sb.append(DateUtil.format(end,"yyyy-MM-dd"));
        }else {
            //設置這周的周日日期,1代表周日,取值范圍1~7,設置1~7之外會從周日開始往前后推算,負前正后,DAY_OF_WEEK的日期變更范圍只會是在當前日期的周
            cal.set(Calendar.DAY_OF_WEEK,1);
            sb.append(DateUtil.format(cal.getTime(),"yyyy-MM-dd"));
        }
        result.put(i,sb.toString());
        //調用 org.apache.commons.lang.time.DateUtils 包下的方法
        //新增一天到下一周的開始日期
        cal.setTime(DateUtils.addDays(cal.getTime(), 1));
    }
    return result;
}

這里參考文章:https://blog.csdn.net/qq_40579568/article/details/125547795

3、獲取當前月某一周的所有日期

拿到某一周的起止時間后,我又需要獲得這周的所有日期怎么辦?

/**
 * 獲取當前月某一周的所有日期
 * @param week 第幾周
 */
public static List<String> weekDay(String week){
    String[] day = getStartEndOfWeek(week);
    String[] split1 = day[0].split("-");
    String[] split2 = day[1].split("-");
    int start = Integer.parseInt(split1[2]);
    int end = Integer.parseInt(split2[2]);
    int month = Integer.parseInt(split1[1]);
    List<String> list = new ArrayList<>();
    for (int i = start; i <= end; i++) {
        list.add(month+"月"+i+"日");
    }
    return list;
}

4、多個日期中,計算最大的連續(xù)天數

除了上面獲取每周起止日期外,還有個要求在多個日期中,計算最大的連續(xù)天數。
如:2023-01-01、2023-01-02、2023-01-10、2023-01-11、2023-01-12、2023-01-15 這幾個日期中,最大的連續(xù)天數是3天。

/**
 * 多個日期中,計算最大的連續(xù)天數
 * 例如: [1,2,3,5,7]  則判定為連續(xù)有3次
 */
public static int continuousDay(List<LocalDate> dateList){
    if (dateList == null || dateList.size() ==0) {
        return 0;
    }
    dateList = dateList.stream().sorted(LocalDate::compareTo).collect(Collectors.toList());
    int maxContinuousDay = 1;
    int continuousDay = 1;
    for (int i = 0; i < dateList.size(); i++) {
        if (i == dateList.size() -1){
            break;
        }
        LocalDate date = dateList.get(i);
        LocalDate secondDate = dateList.get(i + 1);
        if (date.plusDays(1).equals(secondDate)){
            continuousDay ++;
        }else {
            if (continuousDay > maxContinuousDay){
                maxContinuousDay = continuousDay;
            }
            continuousDay = 1;
        }
    }
    return maxContinuousDay;
}

參考文章:https://blog.csdn.net/UserFrank/article/details/125186332

5、判斷指定日期是否在某個范圍內

這里可以直接用hutool的 DateUtil 工具類判斷。除了這些,DateUtil、 LocalDateTimeUtil 還有很多實用的方法,可以去看看 源碼

// date 指定日期; start 范圍開始時間; end 范圍結束時間。
boolean in = DateUtil.isIn(date, start, end);

目前用到的暫時就這些,以后可能會補充,有小伙伴想補充的歡迎留言。文章來源地址http://www.zghlxwxcb.cn/news/detail-786041.html

到了這里,關于hutool日期工具類相關:獲取某月所有周、某周的起止時間或所有日期、計算連續(xù)天數的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包