java 使用Calendar类计算每月有多少自然周,并输出每周的开始和结束日期

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yu_hongrun/article/details/78892440

思路:首先是获取该月的实际天数,然后从1号遍历直至该月最后一天,利用Calendar类找出该日是一周中的第几天,

(1)若该日是周六,则视为一周结束,并用该日期减去6找到该周的开始日期,若相减结果小于等于1,则说明该周起始日期应该是本月1号。

(1)若该日不是周六,且是该月最后一天,则应该在上面计算的基础上再加一周,视月末为该周的结束日,该周起始日期应为改日期减去改日

在一周中的位置加1,例如:2017-01-29号是周日,则视为1月份中的第5周,开始日期是31-3+1

提示:Calendar 类中视周日为一周的开始,值是1

示例代码:

package com.metro.crm.bean;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class test {
    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 == 7) {// 若当天是周6
                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 != 7 && i == days) {// 若是本月最好一天,且不是周日
                count++;
                System.out.println("-----------------------------------");
                System.out.println("第" + count + "周");
                System.out.println("本周开始日期:" + date + "-" + (i - k + 1));
                System.out.println("本周结束日期:" + date + "-" + i);
                System.out.println("-----------------------------------");
            }
        }
    }

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

        }
//        printfWeeks(s + 2);
    }
}

输出结果:


月份:1

days:31

第1周
本周开始日期:2017-1-1

本周结束日期:2017-1-7


第2周
本周开始日期:2017-1-8

本周结束日期:2017-1-14


第3周
本周开始日期:2017-1-15

本周结束日期:2017-1-21


第4周
本周开始日期:2017-1-22

本周结束日期:2017-1-28


第5周
本周开始日期:2017-1-29

本周结束日期:2017-1-31



月份:2

days:28

第1周
本周开始日期:2017-2-1

本周结束日期:2017-2-4


第2周
本周开始日期:2017-2-5

本周结束日期:2017-2-11


第3周
本周开始日期:2017-2-12

本周结束日期:2017-2-18


第4周
本周开始日期:2017-2-19

本周结束日期:2017-2-25


第5周
本周开始日期:2017-2-26

本周结束日期:2017-2-28



月份:3

days:31

第1周
本周开始日期:2017-3-1

本周结束日期:2017-3-4


第2周
本周开始日期:2017-3-5

本周结束日期:2017-3-11


第3周
本周开始日期:2017-3-12

本周结束日期:2017-3-18


第4周
本周开始日期:2017-3-19

本周结束日期:2017-3-25


第5周
本周开始日期:2017-3-26

本周结束日期:2017-3-31



月份:4

days:30

第1周
本周开始日期:2017-4-1

本周结束日期:2017-4-1


第2周
本周开始日期:2017-4-2

本周结束日期:2017-4-8


第3周
本周开始日期:2017-4-9

本周结束日期:2017-4-15


第4周
本周开始日期:2017-4-16

本周结束日期:2017-4-22


第5周
本周开始日期:2017-4-23

本周结束日期:2017-4-29


第6周
本周开始日期:2017-4-30

本周结束日期:2017-4-30



月份:5

days:31

第1周
本周开始日期:2017-5-1

本周结束日期:2017-5-6


第2周
本周开始日期:2017-5-7

本周结束日期:2017-5-13


第3周
本周开始日期:2017-5-14

本周结束日期:2017-5-20


第4周
本周开始日期:2017-5-21

本周结束日期:2017-5-27


第5周
本周开始日期:2017-5-28

本周结束日期:2017-5-31



月份:6

days:30

第1周
本周开始日期:2017-6-1

本周结束日期:2017-6-3


第2周
本周开始日期:2017-6-4

本周结束日期:2017-6-10


第3周
本周开始日期:2017-6-11

本周结束日期:2017-6-17


第4周
本周开始日期:2017-6-18

本周结束日期:2017-6-24


第5周
本周开始日期:2017-6-25

本周结束日期:2017-6-30



月份:7

days:31

第1周
本周开始日期:2017-7-1

本周结束日期:2017-7-1


第2周
本周开始日期:2017-7-2

本周结束日期:2017-7-8


第3周
本周开始日期:2017-7-9

本周结束日期:2017-7-15


第4周
本周开始日期:2017-7-16

本周结束日期:2017-7-22


第5周
本周开始日期:2017-7-23

本周结束日期:2017-7-29


第6周
本周开始日期:2017-7-30

本周结束日期:2017-7-31



月份:8

days:31

第1周
本周开始日期:2017-8-1

本周结束日期:2017-8-5


第2周
本周开始日期:2017-8-6

本周结束日期:2017-8-12


第3周
本周开始日期:2017-8-13

本周结束日期:2017-8-19


第4周
本周开始日期:2017-8-20

本周结束日期:2017-8-26


第5周
本周开始日期:2017-8-27

本周结束日期:2017-8-31



月份:9

days:30

第1周
本周开始日期:2017-9-1

本周结束日期:2017-9-2


第2周
本周开始日期:2017-9-3

本周结束日期:2017-9-9


第3周
本周开始日期:2017-9-10

本周结束日期:2017-9-16


第4周
本周开始日期:2017-9-17

本周结束日期:2017-9-23


第5周
本周开始日期:2017-9-24

本周结束日期:2017-9-30



月份:10

days:31

第1周
本周开始日期:2017-10-1

本周结束日期:2017-10-7


第2周
本周开始日期:2017-10-8

本周结束日期:2017-10-14


第3周
本周开始日期:2017-10-15

本周结束日期:2017-10-21


第4周
本周开始日期:2017-10-22

本周结束日期:2017-10-28


第5周
本周开始日期:2017-10-29

本周结束日期:2017-10-31



月份:11

days:30

第1周
本周开始日期:2017-11-1

本周结束日期:2017-11-4


第2周
本周开始日期:2017-11-5

本周结束日期:2017-11-11


第3周
本周开始日期:2017-11-12

本周结束日期:2017-11-18


第4周
本周开始日期:2017-11-19

本周结束日期:2017-11-25


第5周
本周开始日期:2017-11-26

本周结束日期:2017-11-30



月份:12

days:31

第1周
本周开始日期:2017-12-1

本周结束日期:2017-12-2


第2周
本周开始日期:2017-12-3

本周结束日期:2017-12-9


第3周
本周开始日期:2017-12-10

本周结束日期:2017-12-16


第4周
本周开始日期:2017-12-17

本周结束日期:2017-12-23


第5周
本周开始日期:2017-12-24

本周结束日期:2017-12-30


第6周
本周开始日期:2017-12-31

本周结束日期:2017-12-31

猜你喜欢

转载自blog.csdn.net/yu_hongrun/article/details/78892440