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);
}
}
获取间隔的日期列表工具类
最新推荐文章于 2023-04-10 17:29:54 发布