使用java获取本周、下周、本月的第一个和最后一天

Util

 /**
     * 获取本周的第一天
     * @return String
     **/
    public static Date getWeekStart() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.WEEK_OF_MONTH, 0);
        cal.set(Calendar.DAY_OF_WEEK, 2);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        Date time = cal.getTime();
//        return new SimpleDateFormat("yyyy-MM-dd").format(time) + " 00:00:00";
        return time;
    }

    /**
     * 获取本周的最后一天
     * @return String
     **/
    public static Date getWeekEnd() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_WEEK, cal.getActualMaximum(Calendar.DAY_OF_WEEK));
        cal.add(Calendar.DAY_OF_WEEK, 1);
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 59);
        Date time = cal.getTime();
//        return new SimpleDateFormat("yyyy-MM-dd").format(time) + " 23:59:59";
        return time;
    }
    /**
     * 获取本月第一天
     * @return String
     **/
    public static Date getMonthStart() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.MONTH, 0);
        cal.set(Calendar.DAY_OF_MONTH, 1);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        Date time = cal.getTime();
//        return new SimpleDateFormat("yyyy-MM-dd").format(time) + " 00:00:00";
        return time;
    }

    /**
     * 获取本月最后一天
     * @return String
     **/
    public static Date getMonthEnd() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 59);
        Date time = cal.getTime();
//        return new SimpleDateFormat("yyyy-MM-dd").format(time) + " 23:59:59";
        return time;
    }

    /**
     * 获取下周最后一天(ISO标准周日23:59:59.999)
     * 算法:下周一的00:00:00.000减1毫秒
     */
    public static Date getNextWeekEnd() {
        Calendar cal = Calendar.getInstance();
        // 强制设置周起始日为周一,确保周数计算统一
        cal.setFirstDayOfWeek(Calendar.MONDAY);

        // 增加1周(确保跳到下一周)
        cal.add(Calendar.WEEK_OF_YEAR, 2);
        // 设置到该周的周一00:00:00
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        setMinTime(cal);

        // 回退1毫秒得到周日的最后一刻
        cal.add(Calendar.MILLISECOND, -1);
        return cal.getTime();
    }

    /**
     * 获取下周第一天(ISO标准周一00:00:00.000)
     */
    public static Date getNextWeekStart() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.WEEK_OF_YEAR, 1);
        cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        setMinTime(cal);
        return cal.getTime();
    }
    /**
     * 设置时间到当日最小(线程安全)
     */
    private static void setMinTime(Calendar cal) {
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
    }

    /**
     * 设置时间到当日最大(线程安全)
     */
    private static void setMaxTime(Calendar cal) {
        cal.set(Calendar.HOUR_OF_DAY, 23);
        cal.set(Calendar.MINUTE, 59);
        cal.set(Calendar.SECOND, 59);
        cal.set(Calendar.MILLISECOND, 999);
    }
posted @ 2025-05-27 09:14  大菠萝zZ  阅读(282)  评论(0)    收藏  举报