java获取两个时间之间的所有日期、月份、年份,返回列表

 需求描述

  • 输入开始时间和结束时间,获取时间范围内的所有日期,月份、年份

    (输入可以为"yyyy-MM-dd HH:mm:ss"或者"yyyy-MM-dd")

一、输入开始时间和结束时间,返回时间范围内中的所有日期列表 

/**
     * 传入两个时间范围,返回这两个时间范围内的所有日期,并保存在一个集合中
     *
     * @param beginTime
     * @param endTime
     * @return
     * @throws Exception
     */
    public static List<String> findEveryDay(String beginTime, String endTime)
            throws Exception {
        //创建一个放所有日期的集合
        List<String> dates = new ArrayList();
 
        //创建时间解析对象规定解析格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
 
        //将传入的时间解析成Date类型,相当于格式化
        Date dBegin = sdf.parse(beginTime);
        Date dEnd = sdf.parse(endTime);
 
        //将格式化后的第一天添加进集合
        dates.add(sdf.format(dBegin));
 
        //使用本地的时区和区域获取日历
        Calendar calBegin = Calendar.getInstance();
 
        //传入起始时间将此日历设置为起始日历
        calBegin.setTime(dBegin);
 
        //判断结束日期前一天是否在起始日历的日期之后
        while (dEnd.after(calBegin.getTime())) {
 
            //根据日历的规则:月份中的每一天,为起始日历加一天
            calBegin.add(Calendar.DAY_OF_MONTH, 1);
 
            //得到的每一天就添加进集合
            dates.add(sdf.format(calBegin.getTime()));
            //如果当前的起始日历超过结束日期后,就结束循环
        }
        return dates;
    }

测试输出结果:

 

二、输入开始时间和结束时间,返回时间范围内中的所有月份列表

/**
     * 获取两个日期之间的所有月份 (年月)
     *
     * @param startTime
     * @param endTime
     * @return:list
     */
    public static List<String> getMonthBetweenDate(String startTime, String endTime) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        // 声明保存日期集合
        List<String> list = new ArrayList<>();
        try {
            // 转化成日期类型
            Date startDate = sdf.parse(startTime);
            Date endDate = sdf.parse(endTime);
 
            //用Calendar 进行日期比较判断
            Calendar calendar = Calendar.getInstance();
            while (startDate.getTime() <= endDate.getTime()) {
 
                // 把日期添加到集合
                list.add(sdf.format(startDate));
 
                // 设置日期
                calendar.setTime(startDate);
 
                //把月数增加 1
                calendar.add(Calendar.MONTH, 1);
 
                // 获取增加后的日期
                startDate = calendar.getTime();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

 输入:"2022-07-01  00:00:00 "  "2022-10-27  23:59:59 "

返回结果:[2022-07,2022-08,2022-09,2022-10] 

三、输入开始时间和结束时间,返回时间范围内中的所有年份列表

/**
     * 获取两个日期之间的所有年
     *
     * @param startTime
     * @param endTime
     * @return:list
     */
    public static List<String> getYearBetweenDate(String startTime, String endTime) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
        // 声明保存日期集合
        List<String> list = new ArrayList<>();
        try {
            // 转化成日期类型
            Date startDate = sdf.parse(startTime);
            Date endDate = sdf.parse(endTime);
 
            //用Calendar 进行日期比较判断
            Calendar calendar = Calendar.getInstance();
            while (startDate.getTime() <= endDate.getTime()) {
 
                // 把日期添加到集合
                list.add(sdf.format(startDate));
 
                // 设置日期
                calendar.setTime(startDate);
 
                //把年数增加 1
                calendar.add(Calendar.YEAR, 1);
 
                // 获取增加后的日期
                startDate = calendar.getTime();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

 输入:"2020-07-01  00:00:00 "  "2022-10-27  23:59:59 "

返回结果:[2020,2021,2022] 

猜你喜欢

转载自blog.csdn.net/yyongsheng/article/details/129958757