【Java】根据年和第几周,获取该周第一天和最后一天

默认方法:【此方法得到的第一周,可能会跨年,因为每年的第一天,不一定是刚好星期一,最后一周也有可能跨到下一年

/**
     * 获取指定周的第一天
     * 
     * @param year
     * @param week
     * @return
     */
    public static Date getFirstDayOfWeek(int year, int week) {
        Calendar cal = Calendar.getInstance();
        // 设置年份
        cal.set(Calendar.YEAR, year);
        // 设置周
        cal.set(Calendar.WEEK_OF_YEAR, week);
        // 设置该周第一天为星期一
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
 
        return cal.getTime();
    }
 
    /**
     * 获取指定周的最后一天
     * 
     * @param year
     * @param week
     * @return
     */
    public static Date getLastDayOfWeek(int year, int week) {
        Calendar cal = Calendar.getInstance();
        // 设置年份
        cal.set(Calendar.YEAR, year);
        // 设置周
        cal.set(Calendar.WEEK_OF_YEAR, week);
        // 设置该周第一天为星期一
        cal.setFirstDayOfWeek(Calendar.MONDAY);
        // 设置最后一天是星期日
        cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek() + 5); // Sunday
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
 
        return cal.getTime();
    }

 

改良方法:【限定第一周的第一天是 当年的1月1日, 最后一周的最后一天是  当年的12月31日

//region 获取指定周的第一天 及 指定周的 最后一天
    /**
     * 获取指定周的第一天
     *
     * @param year
     * @param week
     * @return
     */
    public static Date getFirstDayOfWeek(int year, int week) {
        if(week > 1) {
            Calendar cal = Calendar.getInstance();
            // 设置年份
            cal.set(Calendar.YEAR, year);
            // 设置周
            cal.set(Calendar.WEEK_OF_YEAR, week);
            // 设置该周第一天为星期一
            cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
            cal.set(Calendar.HOUR_OF_DAY, 0);
            cal.set(Calendar.MINUTE, 0);
            cal.set(Calendar.SECOND, 0);
            return cal.getTime();
        }
        else {
            Calendar cal = Calendar.getInstance();
            cal.set(year,0,1);
            return cal.getTime();
        }
    }

    /**
     * 获取指定周的最后一天
     *
     * @param year
     * @param week
     * @return
     */
    public static Date getLastDayOfWeek(int year, int week) {
        if(week * 7 >= 365){  // 说明是年的最后一天
            Calendar cal = Calendar.getInstance();
            cal.set(year,11,31);
            return cal.getTime();
        }else{
            Calendar cal = Calendar.getInstance();
            // 设置年份
            cal.set(Calendar.YEAR, year);
            // 设置周
            cal.set(Calendar.WEEK_OF_YEAR, week);
            // 设置该周第一天为星期一
            cal.setFirstDayOfWeek(Calendar.MONDAY);
            // 设置最后一天是星期日
            cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek() + 6); // Sunday
            cal.set(Calendar.HOUR_OF_DAY, 23);
            cal.set(Calendar.MINUTE, 59);
            cal.set(Calendar.SECOND, 59);

            return cal.getTime();
        }
    }
    //endregion

 

 

参考自:https://blog.csdn.net/liaomingwu/article/details/122495065

posted @ 2022-05-13 16:26  狼窝窝  阅读(1300)  评论(0)    收藏  举报