Java工具类01:获取两个日期范围内所有日期,可指定星期输出

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值