Java中年周的相关计算

    /**
     * 根据年周,获取指定周最早的时间点
     */
    public static Date getEarliestDateByYearWeek(Integer yearWeek) {
        if (yearWeek == null) {
            return null;
        }
        String yearWeekStr = String.valueOf(yearWeek);
        if (yearWeekStr.length() != YEAR_WEEK_LENGTH) {
            return null;
        }

        String year = yearWeekStr.substring(0, 4);
        String week = yearWeekStr.substring(4);
        // 获取指定年的第一天
        Calendar calendar = Calendar.getInstance();
        calendar.setMinimalDaysInFirstWeek(7);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.set(Calendar.YEAR, Integer.parseInt(year));
        calendar.set(Calendar.MONTH, Calendar.JANUARY);
        calendar.set(Calendar.WEEK_OF_YEAR, Integer.parseInt(week));
        LocalDate localDate = calendar.getTime().toInstant()
            .atZone(ZoneId.systemDefault()).toLocalDate().with(DayOfWeek.MONDAY);

        return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 根据年周,获取指定周最晚的时间点
     */
    public static Date getLatestDateByYearWeek(Integer yearWeek) {
        if (yearWeek == null) {
            return null;
        }
        String yearWeekStr = String.valueOf(yearWeek);
        if (yearWeekStr.length() != YEAR_WEEK_LENGTH) {
            return null;
        }

        String year = yearWeekStr.substring(0, 4);
        String week = yearWeekStr.substring(4);
        // 获取指定年的第一天
        Calendar calendar = Calendar.getInstance();
        calendar.setMinimalDaysInFirstWeek(7);
        calendar.setFirstDayOfWeek(Calendar.MONDAY);
        calendar.set(Calendar.YEAR, Integer.parseInt(year));
        calendar.set(Calendar.MONTH, Calendar.JANUARY);
        calendar.set(Calendar.WEEK_OF_YEAR, Integer.parseInt(week));
        LocalDate localDate = calendar.getTime().toInstant()
            .atZone(ZoneId.systemDefault()).toLocalDate().with(DayOfWeek.SUNDAY);

        return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 获取指定日期的年周信息
     */
    public static int getYearWeek(Date date) {
        LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDate monday = localDate.with(DayOfWeek.MONDAY);
        WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY, 7);
        int week = monday.get(weekFields.weekOfYear());
        String weekStr = StringUtils.leftPad(String.valueOf(week), 2, "0");
        return Integer.parseInt(monday.getYear() + weekStr);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值