java获取某年、某季度、某月份、某周时间跨度

输入某年,得到某年的第一天和最后一天

输入某年某季度,得到某年某季度的第一天和最后一天

......

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {

    public static void main(String[] args) {
        // 周
        String weekStart = getWeekString(2023, 1, true);
        String weekEnd = getWeekString(2023, 1, false);
        System.out.println(weekStart);
        System.out.println(weekEnd);
        // 月
        String monthStart = getMonthString(2023, 2, true);
        String monthEnd = getMonthString(2023, 2, false);
        System.out.println(monthStart);
        System.out.println(monthEnd);
        // 季度
        String quarterStart = getQuarterString(2023, 2, true);
        String quarterEnd = getQuarterString(2023, 2, false);
        System.out.println(quarterStart);
        System.out.println(quarterEnd);
        // 年
        String yearStart = getYearString(2023, true);
        String yearEnd = getYearString(2023, false);
        System.out.println(yearStart);
        System.out.println(yearEnd);
    }

    /**
     * 获取某年某季度的时间跨度
     * @param year 年份
     * @param quarter 季度
     * @param isStartTime 是否是开始时间
     * @return String
     */
    public static String getQuarterString(int year, int quarter, boolean isStartTime) {
        int startMonth = (quarter - 1) * 3;
        // 根据月获取开始时间
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, startMonth);
        calendar.set(Calendar.DAY_OF_MONTH, 1);

        calendar.set(Calendar.HOUR, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        Date start = calendar.getTime();
        int lastMonth = quarter * 3 - 1;
        calendar.set(Calendar.MONTH, lastMonth);
        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        Date end = calendar.getTime();
        String startTime = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(start);
        String endTime = new SimpleDateFormat("yyyy-MM-dd 23:59:59").format(end);
        if (isStartTime) {
            return startTime;
        } else {
            return endTime;
        }
    }

    /**
     * 获取某年的时间跨度
     * @param year 年份
     * @param isStartTime 是否是开始时间
     * @return String
     */
    public static String getYearString(int year, boolean isStartTime){
        Calendar calendar = Calendar.getInstance();
        calendar.clear();
        calendar.set(Calendar.YEAR, year);
        Date start = calendar.getTime();
        calendar.roll(Calendar.DAY_OF_YEAR, - 1 );
        Date end = calendar.getTime();
        String startTime = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(start);
        String endTime = new SimpleDateFormat("yyyy-MM-dd 23:59:59").format(end);
        if (isStartTime) {
            return startTime;
        } else {
            return endTime;
        }
    }

    /**
     * 获取某年某月的时间跨度
     *
     * @param year 年份
     * @param month 月份
     * @param isStartTime 是否是开始时间
     * @return String
     */
    // 获取指定年指定月的开始天数和结束天数
    public static String getMonthString(int year, int month, boolean isStartTime) {
        // 获取当前分区的日历信息(这里可以使用参数指定时区)
        Calendar calendar = Calendar.getInstance();
        // 设置年
        calendar.set(Calendar.YEAR, year);
        // 设置月,月份从0开始
        calendar.set(Calendar.MONTH, month - 1);
        // 设置为指定月的第一天
        calendar.set(Calendar.DAY_OF_MONTH, 1);
        // 获取指定月第一天的时间
        Date start = calendar.getTime();
        // 设置日历天数为当前月实际天数的最大值,即指定月份的最后一天
        calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
        // 获取最后一天的时间
        Date end = calendar.getTime();
        // 设置返回信息,返回样式根据需求自行格式化
        String startTime = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(start);
        String endTime = new SimpleDateFormat("yyyy-MM-dd 23:59:59").format(end);
        if (isStartTime) {
            return startTime;
        } else {
            return endTime;
        }
    }

    /**
     * 获取某年某周的时间跨度
     *
     * @param year 年份
     * @param week 周数
     * @param isStartTime 是否是开始时间
     * @return String
     */
    public static String getWeekString(int year, int week, boolean isStartTime) {
        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 start = calendar.getTime();
        // 获得指定年的第几周的结束日期(星期几)
        calendar.setWeekDate(weekYear, week, Calendar.SUNDAY);
        Date end = calendar.getTime();
        String startTime = new SimpleDateFormat("yyyy-MM-dd 00:00:00").format(start);
        String endTime = new SimpleDateFormat("yyyy-MM-dd 23:59:59").format(end);
        if (isStartTime) {
            return startTime;
        } else {
            return endTime;
        }
    }
}

测试结果:

// 周

2023-01-02 00:00:00
2023-01-08 23:59:59

// 月

2023-02-01 00:00:00
2023-02-28 23:59:59

// 季度
2023-04-01 00:00:00
2023-06-30 23:59:59

// 年
2023-01-01 00:00:00
2023-12-31 23:59:59

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值