java 使用Calendar類計算每月有多少自然周,并輸出每周的開始和結束日期

jopen 11年前發布 | 68K 次閱讀 Java Java開發

思路:首先是獲取該月的實際天數,然后從1號遍歷直至該月最后一天,利用Calendar類找出該日是一周中的第幾天,

(1)若該日是周日,則視為一周結束,并用該日期減去6找到該周的開始日期,若相減結果小于等于1,則說明該周起始日期應該是本月1號。

(1)若該日不是周日,且是該月最后一天,則應該在上面計算的基礎上再加一周,視月末為該周的結束日,該周起始日期應為改日期減去改日

在一周中的位置加2,例如:2013-09-30號是周一,則視為9月份中的第六周,開始日期是30-2+2

提示:Calendar 類中視周日為一周的開始,值是1

示例代碼:

public static void printfWeeks(String date) throws Exception {
        // String date = "2013-09";
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
        Date date1 = dateFormat.parse(date);
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date1);
        int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.println("days:" + days);
        int count = 0;
        for (int i = 1; i <= days; i++) {
            DateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
            Date date2 = dateFormat1.parse(date + "-" + i);
            calendar.clear();
            calendar.setTime(date2);
            int k = new Integer(calendar.get(Calendar.DAY_OF_WEEK));
            if (k == 1) {// 若當天是周日
                count++;
                System.out.println("-----------------------------------");
                System.out.println("第" + count + "周");
                if (i - 6 <= 1) {
                    System.out.println("本周開始日期:" + date + "-" + 1);
                } else {
                    System.out.println("本周開始日期:" + date + "-" + (i - 6));
                }
                System.out.println("本周結束日期:" + date + "-" + i);
                System.out.println("-----------------------------------");
            }
            if (k != 1 && i == days) {// 若是本月最好一天,且不是周日
                count++;
                System.out.println("-----------------------------------");
                System.out.println("第" + count + "周");
                System.out.println("本周開始日期:" + date + "-" + (i - k + 2));
                System.out.println("本周結束日期:" + date + "-" + i);
                System.out.println("-----------------------------------");
            }
        }
    }

測試代碼:

public static void main(String[] args) throws Exception {
        String s = "2013-";
        for (int i = 1; i <= 12; i++) {
            System.out.println("***");
            System.out.println("月份:" + i);
            printfWeeks(s + i);
            System.out.println("***");

    }

// printfWeeks(s + 2); } </pre>

輸出結果:

***
月份:1
days:31
-----------------------------------
第1周
本周開始日期:2013-1-1
本周結束日期:2013-1-6
-----------------------------------
-----------------------------------
第2周
本周開始日期:2013-1-7
本周結束日期:2013-1-13
-----------------------------------
-----------------------------------
第3周
本周開始日期:2013-1-14
本周結束日期:2013-1-20
-----------------------------------
-----------------------------------
第4周
本周開始日期:2013-1-21
本周結束日期:2013-1-27
-----------------------------------
-----------------------------------
第5周
本周開始日期:2013-1-28
本周結束日期:2013-1-31
-----------------------------------
***
***
月份:2
days:28
-----------------------------------
第1周
本周開始日期:2013-2-1
本周結束日期:2013-2-3
-----------------------------------
-----------------------------------
第2周
本周開始日期:2013-2-4
本周結束日期:2013-2-10
-----------------------------------
-----------------------------------
第3周
本周開始日期:2013-2-11
本周結束日期:2013-2-17
-----------------------------------
-----------------------------------
第4周
本周開始日期:2013-2-18
本周結束日期:2013-2-24
-----------------------------------
-----------------------------------
第5周
本周開始日期:2013-2-25
本周結束日期:2013-2-28
-----------------------------------
***
***
月份:3
days:31
-----------------------------------
第1周
本周開始日期:2013-3-1
本周結束日期:2013-3-3
-----------------------------------
-----------------------------------
第2周
本周開始日期:2013-3-4
本周結束日期:2013-3-10
-----------------------------------
-----------------------------------
第3周
本周開始日期:2013-3-11
本周結束日期:2013-3-17
-----------------------------------
-----------------------------------
第4周
本周開始日期:2013-3-18
本周結束日期:2013-3-24
-----------------------------------
-----------------------------------
第5周
本周開始日期:2013-3-25
本周結束日期:2013-3-31
-----------------------------------
***
***
月份:4
days:30
-----------------------------------
第1周
本周開始日期:2013-4-1
本周結束日期:2013-4-7
-----------------------------------
-----------------------------------
第2周
本周開始日期:2013-4-8
本周結束日期:2013-4-14
-----------------------------------
-----------------------------------
第3周
本周開始日期:2013-4-15
本周結束日期:2013-4-21
-----------------------------------
-----------------------------------
第4周
本周開始日期:2013-4-22
本周結束日期:2013-4-28
-----------------------------------
-----------------------------------
第5周
本周開始日期:2013-4-29
本周結束日期:2013-4-30
-----------------------------------
***
***
月份:5
days:31
-----------------------------------
第1周
本周開始日期:2013-5-1
本周結束日期:2013-5-5
-----------------------------------
-----------------------------------
第2周
本周開始日期:2013-5-6
本周結束日期:2013-5-12
-----------------------------------
-----------------------------------
第3周
本周開始日期:2013-5-13
本周結束日期:2013-5-19
-----------------------------------
-----------------------------------
第4周
本周開始日期:2013-5-20
本周結束日期:2013-5-26
-----------------------------------
-----------------------------------
第5周
本周開始日期:2013-5-27
本周結束日期:2013-5-31
-----------------------------------
***
***
月份:6
days:30
-----------------------------------
第1周
本周開始日期:2013-6-1
本周結束日期:2013-6-2
-----------------------------------
-----------------------------------
第2周
本周開始日期:2013-6-3
本周結束日期:2013-6-9
-----------------------------------
-----------------------------------
第3周
本周開始日期:2013-6-10
本周結束日期:2013-6-16
-----------------------------------
-----------------------------------
第4周
本周開始日期:2013-6-17
本周結束日期:2013-6-23
-----------------------------------
-----------------------------------
第5周
本周開始日期:2013-6-24
本周結束日期:2013-6-30
-----------------------------------
***
***
月份:7
days:31
-----------------------------------
第1周
本周開始日期:2013-7-1
本周結束日期:2013-7-7
-----------------------------------
-----------------------------------
第2周
本周開始日期:2013-7-8
本周結束日期:2013-7-14
-----------------------------------
-----------------------------------
第3周
本周開始日期:2013-7-15
本周結束日期:2013-7-21
-----------------------------------
-----------------------------------
第4周
本周開始日期:2013-7-22
本周結束日期:2013-7-28
-----------------------------------
-----------------------------------
第5周
本周開始日期:2013-7-29
本周結束日期:2013-7-31
-----------------------------------
***
***
月份:8
days:31
-----------------------------------
第1周
本周開始日期:2013-8-1
本周結束日期:2013-8-4
-----------------------------------
-----------------------------------
第2周
本周開始日期:2013-8-5
本周結束日期:2013-8-11
-----------------------------------
-----------------------------------
第3周
本周開始日期:2013-8-12
本周結束日期:2013-8-18
-----------------------------------
-----------------------------------
第4周
本周開始日期:2013-8-19
本周結束日期:2013-8-25
-----------------------------------
-----------------------------------
第5周
本周開始日期:2013-8-26
本周結束日期:2013-8-31
-----------------------------------
***
***
月份:9
days:30
-----------------------------------
第1周
本周開始日期:2013-9-1
本周結束日期:2013-9-1
-----------------------------------
-----------------------------------
第2周
本周開始日期:2013-9-2
本周結束日期:2013-9-8
-----------------------------------
-----------------------------------
第3周
本周開始日期:2013-9-9
本周結束日期:2013-9-15
-----------------------------------
-----------------------------------
第4周
本周開始日期:2013-9-16
本周結束日期:2013-9-22
-----------------------------------
-----------------------------------
第5周
本周開始日期:2013-9-23
本周結束日期:2013-9-29
-----------------------------------
-----------------------------------
第6周
本周開始日期:2013-9-30
本周結束日期:2013-9-30
-----------------------------------
***
***
月份:10
days:31
-----------------------------------
第1周
本周開始日期:2013-10-1
本周結束日期:2013-10-6
-----------------------------------
-----------------------------------
第2周
本周開始日期:2013-10-7
本周結束日期:2013-10-13
-----------------------------------
-----------------------------------
第3周
本周開始日期:2013-10-14
本周結束日期:2013-10-20
-----------------------------------
-----------------------------------
第4周
本周開始日期:2013-10-21
本周結束日期:2013-10-27
-----------------------------------
-----------------------------------
第5周
本周開始日期:2013-10-28
本周結束日期:2013-10-31
-----------------------------------
***
***
月份:11
days:30
-----------------------------------
第1周
本周開始日期:2013-11-1
本周結束日期:2013-11-3
-----------------------------------
-----------------------------------
第2周
本周開始日期:2013-11-4
本周結束日期:2013-11-10
-----------------------------------
-----------------------------------
第3周
本周開始日期:2013-11-11
本周結束日期:2013-11-17
-----------------------------------
-----------------------------------
第4周
本周開始日期:2013-11-18
本周結束日期:2013-11-24
-----------------------------------
-----------------------------------
第5周
本周開始日期:2013-11-25
本周結束日期:2013-11-30
-----------------------------------
***
***
月份:12
days:31
-----------------------------------
第1周
本周開始日期:2013-12-1
本周結束日期:2013-12-1
-----------------------------------
-----------------------------------
第2周
本周開始日期:2013-12-2
本周結束日期:2013-12-8
-----------------------------------
-----------------------------------
第3周
本周開始日期:2013-12-9
本周結束日期:2013-12-15
-----------------------------------
-----------------------------------
第4周
本周開始日期:2013-12-16
本周結束日期:2013-12-22
-----------------------------------
-----------------------------------
第5周
本周開始日期:2013-12-23
本周結束日期:2013-12-29
-----------------------------------
-----------------------------------
第6周
本周開始日期:2013-12-30
本周結束日期:2013-12-31

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!