近期工作中遇到的场景,记录一下。
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Test2 {
public static void main(String[] args) {
// List<LocalDate> days = getDays(LocalDate.parse("2021-12-10"), LocalDate.parse("2021-12-23"));
List<LocalDateTime> times = getDateTimes(LocalDate.parse("2021-12-11"), LocalDate.parse("2021-12-12"),5);
System.out.println(times);
}
/**
* 获取两个日期之间的所有日期
* @param sDate 开始事件
* @param eDate 结束事件
* @return
*/
public static List<LocalDate> getDays(LocalDate sDate,LocalDate eDate){
Set<LocalDate> dateSet = new HashSet<>();
LocalDate idxDate;
// 定义日期变量,循环开始 将开始日期赋给日期变量,判断开始日期是否在结束日期之后(小于或等于结束日期),
// 日期变量不结束日期之后则将日期变量添加至集合,然后变量日期加累加一天。
// 日期变量在结束日期之后的话,则结束循环返回
for(idxDate = sDate;!idxDate.isAfter(eDate);idxDate = idxDate.plusDays(1)){
dateSet.add(idxDate);
}
//排序后返回
return dateSet.stream().sorted(LocalDate::compareTo).collect(Collectors.toList());
}
/**
* 获取两个日期之间的,指定间隔的 时间节点集合
* @param sDate 开始日期
* @param eDate 结束日期
* @param timeInterval 时间间隔 (5,15,30,60) 分钟
* @return
*/
public static List<LocalDateTime> getDateTimes(LocalDate sDate,LocalDate eDate,int timeInterval){
//开始时间(当天 00:00:00)
LocalDateTime sd = LocalDateTime.of(sDate, LocalTime.of(0, 0, 0));
//结束时间(当天23:59:00)
LocalDateTime ed = LocalDateTime.of(eDate, LocalTime.of(23, 59, 59));
Set<LocalDateTime> timeSet = new HashSet<>();
//定义时间变量
LocalDateTime idxTime;
// 定义日期变量,循环开始 将开始日期赋给日期变量,判断开始日期是否在结束日期之后(小于或等于结束日期),
// 日期变量不结束日期之后则将日期变量添加至集合,然后变量日期加累加指定的时间间隔
// 日期变量在结束日期之后的话,则结束循环返回
for(idxTime = sd;!idxTime.isAfter(ed);idxTime = idxTime.plusMinutes(timeInterval)){
timeSet.add(idxTime);
}
//排序后返回
return timeSet.stream().sorted(LocalDateTime::compareTo).collect(Collectors.toList());
}
}