java 根据年份计算总周数并获取每周的日期范围

1.当年包含下一年且周期为最后一周

 public static void main(String[] args) {
        int year = 2021; // 要计算的年份
        // 获取指定年份的第一天
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, 0);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        int totalWeeks = 0; // 总周数
        // 循环计算每周的日期范围
        while (calendar.get(Calendar.YEAR) == year) {
            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
            if (dayOfWeek == Calendar.SUNDAY) {
                totalWeeks++;
                Date startDate = calendar.getTime();
                calendar.add(Calendar.DAY_OF_MONTH, 6);
                Date endDate = calendar.getTime();
                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                System.out.println("第" + totalWeeks + "周: " + dateFormat.format(startDate) + " - " + dateFormat.format(endDate));
            }
            calendar.add(Calendar.DAY_OF_MONTH, 1);
        }
    }

2.当年包含上一年且周期为第一周

 public static void main(String[] args) {
        int year = 2021; // 要计算的年份
        List<String> dateList = new ArrayList<>();
        // 获取指定年份的第一天
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, 0);
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        // 计算总周数
        int totalWeeks = calendar.getActualMaximum(Calendar.WEEK_OF_YEAR);
        // 输出每周的日期范围并按倒序排序
        for (int i = totalWeeks; i >= 1; i--) {
            // 获取每周的起始日期
            calendar.set(Calendar.WEEK_OF_YEAR, i);
            calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
            Date startDate = calendar.getTime();
            // 获取每周的结束日期
            calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
            Date endDate = calendar.getTime();
            dateList.add("第" + i + "周(" + dateFormat.format(startDate) + "到" +
                    dateFormat.format(endDate) + ")");
        }
        /**
         * 顺序反转
         */
        Collections.reverse(dateList);
        dateList.forEach(System.out::println);
    }

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值