需求描述
- 输入开始时间和结束时间,获取时间范围内的所有日期,月份、年份
(输入可以为"yyyy-MM-dd HH:mm:ss"或者"yyyy-MM-dd")
一、输入开始时间和结束时间,返回时间范围内中的所有日期列表
public static ListfindEveryDay(String beginTime, String endTime) throws Exception { //创建一个放所有日期的集合 List 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; }
测试输出结果:
二、输入开始时间和结束时间,返回时间范围内中的所有月份列表
public static ListgetMonthBetweenDate(String startTime, String endTime) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); // 声明保存日期集合 List 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]
三、输入开始时间和结束时间,返回时间范围内中的所有年份列表
public static ListgetYearBetweenDate(String startTime, String endTime) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); // 声明保存日期集合 List 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]