概要
几天遇到一个需求要求给入指定枚举周获取至下一枚举周的日期
参数:1.一个指定周几的list
2.自己通过当日日期计算出下一个周数(该块代码未贴至本贴)
例:指定list为[1,3,5],当日周三则计算出的周数为5
技术细节
最开始使用TemporalAdjusters.nextOrSame(dayOfWeek)结果一直不对当日枚举日的每一次轮循下日期都不对,最终发现使用TemporalAdjusters.next(dayOfWeek)完美解决问题
TemporalAdjusters.nextOrSame(dayOfWeek)
方法是返回下一个指定星期几的日期,如果当前日期恰好就是该星期几,则返回当天的日期。
而 TemporalAdjusters.next(dayOfWeek)
方法则是直接返回下一个指定星期几的日期,不论当前日期是否为该星期几。
例如,假设今天是周三,调用 TemporalAdjusters.nextOrSame(DayOfWeek.WEDNESDAY)
返回的是今天的日期(即9月13日),而调用 TemporalAdjusters.next(DayOfWeek.WEDNESDAY)
返回的是下周三的日期(即9月20日)。
如下代码会返回十次指定周数的日期,例:今天的日期(即9月13日)则dayList集合里面第一条会是周五9月十五日,接着依次周一、周三、周五直至dayList中塞满10条
public static void main(String[] args) {
ArrayList<Date> dayList = new ArrayList<>();
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(3);
list.add(5);
// 指定下个为周5
int dayWeek=1;
int index = list.indexOf(dayWeek);
if (index==0){
index=1;
}
List<Integer> subTwo=list;//若为设定的第一天则不进行排序
if (dayWeek!=list.get(0)){
// 进行排序
List<Integer> subOne = new ArrayList<>(list.subList(0, index));//创建新的列表对象,确保对 subOne 的修改不会影响原始列表
subTwo = new ArrayList<>(list.subList(index, list.size()));//创建新的列表对象,确保对 subTwo 的修改不会影响原始列表
subTwo.addAll(subOne);
}
System.out.println("排序后的集合--"+list);
// 将列表转换为 Integer 数组
Integer[] integerArray = subTwo.toArray(new Integer[0]);
// 创建 DayOfWeek 数组
DayOfWeek[] targetDays = new DayOfWeek[integerArray.length];
// 将 Integer 数组中的元素转换为 DayOfWeek 枚举类型
for (int i = 0; i < integerArray.length; i++) {
targetDays[i] = DayOfWeek.of(integerArray[i]);
}
// 获取当前日期
LocalDate currentDate = LocalDate.now();
LocalTime currentTime = LocalTime.now();
int count = 0;
while (count < 10) {
// 每轮循完数组一次对当日日期LocalDate加一周。例:第一次轮循currentDate为9月10日,第二次就为9月17日
for (DayOfWeek dayOfWeek : targetDays) {
LocalDateTime nextDateTime = currentDate.atTime(currentTime).with(TemporalAdjusters.next(dayOfWeek));//将当天日期和时间合并
//将LocalDateTime转换成date日期类
Date date = Date.from(nextDateTime.atZone(ZoneId.systemDefault()).toInstant());
// 将时分秒设成指定00:00:00
Date date1 = resetTime(date);
dayList.add(date1);
count++;
if (count >= 10) {
break;
}
}
// 将 currentDate 的值增加一周
currentDate = currentDate.plusWeeks(1);
}
for (int i = 0; i < dayList.size(); i++) {
System.out.println("返回结果:"+dayList.get(i));
}
}
小结
提示:这里可以添加总结
例如:
提供先进的推理,复杂的指令,更多的创造力。