Java获取指定年份每一个周的日期范围

2 篇文章 0 订阅

需求场景:

简述项目相关背景:接到项目组需求,给定年份,返回对应该年份所有周的日期范围


代码:

思路:一步一步来,从第1周到最后1周,最后返回list,列表的大小即是该年份的总周数

public class YearWeeksUtil {

    public static final String START_TIME = "startTime";
    public static final String END_TIME = "endTime";

    /**
     * 获取某年某周的时间跨度
     *
     * @param year 年份
     * @param week 周数
     * @return k-v
     */
    public static Map<String, String> getWeekRangeMap(int year, int week) {
        Map<String, String> dateMap = new HashMap<>(8);
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        // 设置星期一为一周开始的第一天
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        // 可以不用设置
        calendar.setMinimalDaysInFirstWeek(4);
        // 获得当前的年
        int weekYear = calendar.get(Calendar.YEAR);
        // 获得指定年的第几周的开始日期(星期几)
        calendar.setWeekDate(weekYear, week, Calendar.MONDAY);
        Date time = calendar.getTime();
        String startTime = new SimpleDateFormat(DateUtils.YYYY_MM_DD).format(time);
        dateMap.put(START_TIME, startTime);
        // 获得指定年的第几周的结束日期(星期几)
        calendar.setWeekDate(weekYear, week, Calendar.SUNDAY);
        time = calendar.getTime();
        String endTime = new SimpleDateFormat(DateUtils.YYYY_MM_DD).format(time);
        dateMap.put(END_TIME, endTime);
        return dateMap;
    }

    /**
     * 获取某年有多少周
     *
     * @param year 年份
     * @return 当前年份的总周数
     */
    public static int getYearWeekCount(int year) {
        int week = 52;
        try {
            Map<String, String> timeMap = getWeekRangeMap(year, 53);
            if (!CollectionUtils.isEmpty(timeMap)) {
                String startTime = timeMap.get(START_TIME);
                if (startTime.substring(0, 4).equals(year + "")) {
                    // 判断年度是否相符,如果相符说明有53个周。
                    week = 53;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return week;
    }

    /**
     * 获取某年所有周的日期跨度
     *
     * @param year 年份
     * @return list 当前年份所有周的日期范围
     */
    public static List<Map<String, String>> getYearWeekMap(int year) {
        int weeks = getYearWeekCount(year);
        List<Map<String, String>> yearWeekMap = new ArrayList<>();
        for (int i = 1; i <= weeks; i++) {
            Map<String, String> dateMap = getWeekRangeMap(year, i);
            yearWeekMap.add(dateMap);
        }
        return yearWeekMap;
    }

}

postman测试:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值