获取某一年中所有星期及其该星期下的日期,并对星期周数统计

获取某一年按周统计数据及该周下日期,效果如下

1     [2021-01-01, 2021-01-02, 2021-01-03]
2     [2021-01-04, 2021-01-05, 2021-01-06, 2021-01-07, 2021-01-08, 2021-01-09, 2021-01-10]
3     [2021-01-11, 2021-01-12, 2021-01-13, 2021-01-14, 2021-01-15, 2021-01-16, 2021-01-17]
4     [2021-01-18, 2021-01-19, 2021-01-20, 2021-01-21, 2021-01-22, 2021-01-23, 2021-01-24]
5     [2021-01-25, 2021-01-26, 2021-01-27, 2021-01-28, 2021-01-29, 2021-01-30, 2021-01-31]
6     [2021-02-01, 2021-02-02, 2021-02-03, 2021-02-04, 2021-02-05, 2021-02-06, 2021-02-07]
7     [2021-02-08, 2021-02-09, 2021-02-10, 2021-02-11, 2021-02-12, 2021-02-13, 2021-02-14]
8     [2021-02-15, 2021-02-16, 2021-02-17, 2021-02-18, 2021-02-19, 2021-02-20, 2021-02-21]
9     [2021-02-22, 2021-02-23, 2021-02-24, 2021-02-25, 2021-02-26, 2021-02-27, 2021-02-28]
10     [2021-03-01, 2021-03-02, 2021-03-03, 2021-03-04, 2021-03-05, 2021-03-06, 2021-03-07]
11     [2021-03-08, 2021-03-09, 2021-03-10, 2021-03-11, 2021-03-12, 2021-03-13, 2021-03-14]
12     [2021-03-15, 2021-03-16, 2021-03-17, 2021-03-18, 2021-03-19, 2021-03-20, 2021-03-21]
13     [2021-03-22, 2021-03-23, 2021-03-24, 2021-03-25, 2021-03-26, 2021-03-27, 2021-03-28]
14     [2021-03-29, 2021-03-30, 2021-03-31, 2021-04-01, 2021-04-02, 2021-04-03, 2021-04-04]
15     [2021-04-05, 2021-04-06, 2021-04-07, 2021-04-08, 2021-04-09, 2021-04-10, 2021-04-11]
16     [2021-04-12, 2021-04-13, 2021-04-14, 2021-04-15, 2021-04-16, 2021-04-17, 2021-04-18]
17     [2021-04-19, 2021-04-20, 2021-04-21, 2021-04-22, 2021-04-23, 2021-04-24, 2021-04-25]
18     [2021-04-26, 2021-04-27, 2021-04-28, 2021-04-29, 2021-04-30, 2021-05-01, 2021-05-02]
19     [2021-05-03, 2021-05-04, 2021-05-05, 2021-05-06, 2021-05-07, 2021-05-08, 2021-05-09]
20     [2021-05-10, 2021-05-11, 2021-05-12, 2021-05-13, 2021-05-14, 2021-05-15, 2021-05-16]
21     [2021-05-17, 2021-05-18, 2021-05-19, 2021-05-20, 2021-05-21, 2021-05-22, 2021-05-23]
22     [2021-05-24, 2021-05-25, 2021-05-26, 2021-05-27, 2021-05-28, 2021-05-29, 2021-05-30]
23     [2021-05-31, 2021-06-01, 2021-06-02, 2021-06-03, 2021-06-04, 2021-06-05, 2021-06-06]
24     [2021-06-07, 2021-06-08, 2021-06-09, 2021-06-10, 2021-06-11, 2021-06-12, 2021-06-13]
25     [2021-06-14, 2021-06-15, 2021-06-16, 2021-06-17, 2021-06-18, 2021-06-19, 2021-06-20]
26     [2021-06-21, 2021-06-22, 2021-06-23, 2021-06-24, 2021-06-25, 2021-06-26, 2021-06-27]
27     [2021-06-28, 2021-06-29, 2021-06-30, 2021-07-01, 2021-07-02, 2021-07-03, 2021-07-04]
28     [2021-07-05, 2021-07-06, 2021-07-07, 2021-07-08, 2021-07-09, 2021-07-10, 2021-07-11]
29     [2021-07-12, 2021-07-13, 2021-07-14, 2021-07-15, 2021-07-16, 2021-07-17, 2021-07-18]
30     [2021-07-19, 2021-07-20, 2021-07-21, 2021-07-22, 2021-07-23, 2021-07-24, 2021-07-25]
31     [2021-07-26, 2021-07-27, 2021-07-28, 2021-07-29, 2021-07-30, 2021-07-31, 2021-08-01]
32     [2021-08-02, 2021-08-03, 2021-08-04, 2021-08-05, 2021-08-06, 2021-08-07, 2021-08-08]
33     [2021-08-09, 2021-08-10, 2021-08-11, 2021-08-12, 2021-08-13, 2021-08-14, 2021-08-15]
34     [2021-08-16, 2021-08-17, 2021-08-18, 2021-08-19, 2021-08-20, 2021-08-21, 2021-08-22]
35     [2021-08-23, 2021-08-24, 2021-08-25, 2021-08-26, 2021-08-27, 2021-08-28, 2021-08-29]
36     [2021-08-30, 2021-08-31, 2021-09-01, 2021-09-02, 2021-09-03, 2021-09-04, 2021-09-05]
37     [2021-09-06, 2021-09-07, 2021-09-08, 2021-09-09, 2021-09-10, 2021-09-11, 2021-09-12]
38     [2021-09-13, 2021-09-14, 2021-09-15, 2021-09-16, 2021-09-17, 2021-09-18, 2021-09-19]
39     [2021-09-20, 2021-09-21, 2021-09-22, 2021-09-23, 2021-09-24, 2021-09-25, 2021-09-26]
40     [2021-09-27, 2021-09-28, 2021-09-29, 2021-09-30, 2021-10-01, 2021-10-02, 2021-10-03]
41     [2021-10-04, 2021-10-05, 2021-10-06, 2021-10-07, 2021-10-08, 2021-10-09, 2021-10-10]
42     [2021-10-11, 2021-10-12, 2021-10-13, 2021-10-14, 2021-10-15, 2021-10-16, 2021-10-17]
43     [2021-10-18, 2021-10-19, 2021-10-20, 2021-10-21, 2021-10-22, 2021-10-23, 2021-10-24]
44     [2021-10-25, 2021-10-26, 2021-10-27, 2021-10-28, 2021-10-29, 2021-10-30, 2021-10-31]
45     [2021-11-01, 2021-11-02, 2021-11-03, 2021-11-04, 2021-11-05, 2021-11-06, 2021-11-07]
46     [2021-11-08, 2021-11-09, 2021-11-10, 2021-11-11, 2021-11-12, 2021-11-13, 2021-11-14]
47     [2021-11-15, 2021-11-16, 2021-11-17, 2021-11-18, 2021-11-19, 2021-11-20, 2021-11-21]
48     [2021-11-22, 2021-11-23, 2021-11-24, 2021-11-25, 2021-11-26, 2021-11-27, 2021-11-28]
49     [2021-11-29, 2021-11-30, 2021-12-01, 2021-12-02, 2021-12-03, 2021-12-04, 2021-12-05]
50     [2021-12-06, 2021-12-07, 2021-12-08, 2021-12-09, 2021-12-10, 2021-12-11, 2021-12-12]
51     [2021-12-13, 2021-12-14, 2021-12-15, 2021-12-16, 2021-12-17, 2021-12-18, 2021-12-19]
52     [2021-12-20, 2021-12-21, 2021-12-22, 2021-12-23, 2021-12-24, 2021-12-25, 2021-12-26]
53     [2021-12-27, 2021-12-28, 2021-12-29, 2021-12-30, 2021-12-31]


    /**
     * @param year 年份
     * @return java.util.Map<java.lang.Integer, java.util.List < java.lang.String>>
     * <p>
     * 获取某一年中所有星期及其该星期下的日期
     * </p>
     * @author: xjl
     * @since : 2021/4/6
     */
    public static Map<Integer, List<String>> weekOfYear(Integer year) {

        //请注意月份是从0-11,天数是1, year-1-1 至 year-12-31
        Calendar start = Calendar.getInstance();
        //year-1-1 开始
        start.set(year, Calendar.JANUARY, 1);
        Calendar end = Calendar.getInstance();
        // year+1-0-0结束,year+1-1-1不算
        end.set(year + 1, Calendar.JANUARY, 0);

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        //存放日期list
        List<String> dateList = new ArrayList<>();
        Map<Integer, List<String>> map = new HashMap<>();

        while (start.compareTo(end) <= 0) {
            start.get(Calendar.DAY_OF_WEEK);
            dateList.add(format.format(start.getTime()));
            //循环,每次天数加1
            start.set(Calendar.DATE, start.get(Calendar.DATE) + 1);
        }

        for (String date : dateList) {
            DateTime dateTime = new DateTime(date, DatePattern.NORM_DATE_FORMAT);
            int i = dateTime.weekOfYear();
            List<String> list;
            if (map.containsKey(i)) {
                list = map.get(i);
            } else {
                list = new ArrayList<>();
            }
            list.add(date);
            map.put(i, list);
        }
        Set<Integer> keySet = map.keySet();
        int maxKey = 0;
        for (Integer integer : keySet) {
            if (integer > maxKey) {
                maxKey = integer;
            }
        }

        List<String> maxList = map.get(maxKey);
        String s = maxList.get(maxList.size() - 1);
        boolean contains = s.contains("12-31");
        //如果不包含
        if (!contains) {
            List<String> initList = map.get(1);
            List<String> listMore = new ArrayList<>();
            Iterator<String> iterator = initList.iterator();
            while (iterator.hasNext()) {
                String s1 = iterator.next();
                if (s1.contains("12-2") || s1.contains("12-3")) {
                    listMore.add(s1);
                    iterator.remove();
                }
            }
            map.put(maxKey + 1, listMore);
        }
        return map;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值