获取间隔的日期列表工具类

public class RangeDateUtil {


	/**
	 * 获取间隔的月份列表
	 * @param preYear 开始月份
	 * @param endYear 截止月份
	 */
	public static List<YearMonth> getRangeYears(YearMonth preYear, YearMonth endYear) {
		List<YearMonth> years = new ArrayList<>();
		// 间隔的月数
		long betweenYears = ChronoUnit.MONTHS.between(preYear, endYear);
		if (betweenYears < 1) {
			// 开始日期<=截止日期
			return years;
		}
		// 创建一个从开始日期、每次加一个月的无限流,限制到截止月份为止
		Stream.iterate(preYear, c -> c.plusMonths(1))
			.limit(betweenYears + 1)
			.forEach(years::add);
		return years;
	}

	/**
	 * 获取指定月份前的指定月数的日期列表
	 * @param endYear		截止月份
	 * @param betweenYears	间隔月数
	 */
	public static List<YearMonth> getPreRangeYears(YearMonth endYear, int betweenYears) {
		YearMonth preYear = endYear.minusYears(betweenYears);
		return getRangeYears(preYear, endYear);
	}

	/**
	 * 获取指定月份前的指定月数的日期列表
	 * @param preYear		开始月份
	 * @param betweenYears	间隔月数
	 */
	public static List<YearMonth> getEndRangeYears(YearMonth preYear, int betweenYears) {
		YearMonth endYear = preYear.plusMonths(betweenYears);
		return getRangeYears(preYear, endYear);
	}

	/**
	 * 获取间隔的日期列表
	 * @param preDate 开始日期
	 * @param endDate 截止日期
	 */
	public static List<LocalDate> getRangeDays(LocalDate preDate, LocalDate endDate) {
		List<LocalDate> dates = new ArrayList<>();
		// 间隔的天数
		long betweenDays = ChronoUnit.DAYS.between(preDate, endDate);
		if (betweenDays < 1) {
			// 开始日期<=截止日期
			return dates;
		}
		// 创建一个从开始日期、每次加一天的无限流,限制到截止日期为止
		Stream.iterate(preDate, c -> c.plusDays(1))
			.limit(betweenDays + 1)
			.forEach(dates::add);
		return dates;
	}

	/**
	 * 获取指定日期前的指定天数的日期列表
	 * @param endDate		截止日期
	 * @param betweenDays	间隔天数
	 */
	public static List<LocalDate> getPreRangeDays(LocalDate endDate, int betweenDays) {
		LocalDate preDate = endDate.minusDays(betweenDays);
		return getRangeDays(preDate, endDate);
	}

	/**
	 * 获取指定日期后的指定天数的日期列表
	 * @param preDate		开始日期
	 * @param betweenDays	间隔天数
	 */
	public static List<LocalDate> getEndRangeDays(LocalDate preDate, int betweenDays) {
		LocalDate endDate = preDate.plusDays(betweenDays);
		return getRangeDays(preDate, endDate);
	}

	/**
	 * 获取间隔的日期列表
	 * @param preDate 开始日期
	 * @param endDate 截止日期
	 */
	public static List<Date> getRangeDays(Date preDate, Date endDate) {
		List<Date> dates = new ArrayList<>();
		// 间隔的天数
		int betweenDays = (int) ((endDate.getTime() - preDate.getTime()) / (1000*3600*24));
		if (betweenDays < 1) {
			// 开始日期<=截止日期
			return dates;
		}
		// 创建一个从开始日期、每次加一天的无限流,限制到截止日期为止
		Stream.iterate(preDate, c -> DateUtil.plusDays(c, 1))
			.limit(betweenDays + 1)
			.forEach(dates::add);
		return dates;
	}

	/**
	 * 获取指定日期前的指定天数的日期列表
	 * @param endDate		截止日期
	 * @param betweenDays	间隔天数
	 */
	public static List<Date> getPreRangeDays(Date endDate, int betweenDays) {
		Date preDate = DateUtil.minusDays(endDate, betweenDays);
		return getRangeDays(preDate, endDate);
	}

	/**
	 * 获取指定日期后的指定天数的日期列表
	 * @param preDate		开始日期
	 * @param betweenDays	间隔天数
	 */
	public static List<Date> getEndRangeDays(Date preDate, int betweenDays) {
		Date endDate = DateUtil.plusDays(preDate, betweenDays);
		return getRangeDays(preDate, endDate);
	}

	/**
	 * 获取间隔的月份列表
	 * @param preYear 开始月份(yyyy-MM格式)
	 * @param endYear 截止月份(yyyy-MM格式)
	 */
	public static List<YearMonth> getRangeYears(String preYear, String endYear) {
		YearMonth pDate = YearMonth.parse(preYear);
		YearMonth eDate = YearMonth.parse(endYear);
		return getRangeYears(pDate, eDate);
	}
	/**
	 * 获取间隔的日期列表
	 * @param preDate 开始日期(yyyy-MM-dd格式)
	 * @param endDate 截止日期(yyyy-MM-dd格式)
	 */
	public static List<LocalDate> getRangeDays(String preDate, String endDate) {
		LocalDate pDate = LocalDate.parse(preDate);
		LocalDate eDate = LocalDate.parse(endDate);
		return getRangeDays(pDate, eDate);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值