1、获取两个日期范围内所有日期,可指定星期输出;实现代码如下:
/* * Copyright (c) 2018-2028, Wujingjie All rights reserved. * * Author: wujingjie (wuhang2008it@hotmail.com) */ package com.test.common.utils; import lombok.extern.slf4j.Slf4j; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; /** * 通用工具类 * * @author wujingjie */ @Slf4j public class CommonUtil { /** * 获取指定星期开始日期与结束日期区间内日期 * @param start 开始日期 yyyy-MM-dd * @param end 结束日期 yyyy-MM-dd * @param week 星期 “1,2,3,4,5,6,7” * @return */ public static List<Date> getWeekBetweenDate(String start, String end, String week){ DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String[] weekDays = {"7", "1", "2", "3", "4", "5", "6"}; List<Date> list = new ArrayList<>(); try{ //开始日期 Calendar calendarStart = Calendar.getInstance(); calendarStart.setTime(dateFormat.parse(start)); //结束日期 Calendar calendarEnd = Calendar.getInstance(); calendarEnd.setTime(dateFormat.parse(end)); calendarEnd.add(Calendar.DAY_OF_YEAR, 1); while (calendarStart.before(calendarEnd)) { // 星期中的某天。 int w = calendarStart.get(Calendar.DAY_OF_WEEK) - 1; if (w < 0) { w = 0; } // 是否在指定星期内(包含开始日期,结束日期) if(week.contains(weekDays[w])){ list.add(calendarStart.getTime()); } //日期累计 calendarStart.add(Calendar.DAY_OF_YEAR, 1); } }catch (Exception e){ log.error("CommonUtil工具类方法getWeekBetweenDate异常信息 {}",e.toString()); return list; } return list; } public static void main(String[] args) { //获取 开始日期 2023-04-21 结束日期 2023-04-30 之间为星期一、星期日的日期 List<Date> list = getWeekBetweenDate("2023-04-21","2023-04-30","1,7"); for(Date data : list){ System.out.println(data); } } }
2、运行结果
Sun Apr 23 00:00:00 CST 2023 Mon Apr 24 00:00:00 CST 2023 Sun Apr 30 00:00:00 CST 2023