如何根据传入时间,获取附近7条日期并且不可超出当前时间
@Test public void List() {
String appointTime = "2021-12-02";
List<String> dateList = new ArrayList<>();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
String now = simpleDateFormat.format(date);
try {
date = simpleDateFormat.parse(appointTime);
log.info("转换成功 {}", date);
} catch (ParseException e) {
log.info("转换失败 {}", date);
}
//先获取后三天
String insertTime;
for (int i = 0; i <= 3; i++) {
insertTime = simpleDateFormat.format(DateUtils.addDays(date, i));
dateList.add(insertTime);
if (insertTime.equals(now)) {
break;
}
}
Integer num = dateList.size();
//根据指定天数后获取数,判断指定时间前需获取多少条
for (int i = 1; i <= 7 - num; i++) {
insertTime = simpleDateFormat.format(DateUtils.addDays(date, -i));
dateList.add(insertTime);
}
Collections.sort(dateList);
}
目前能力只能通过代码堆积的形式实现,请问还有什么更好的方法来获取实现吗,学生我技术上限了。求各位老师指点指点
回答:
开始回答了一版,发现理解错了意思。。哈哈哈,删了重新回答一次
我试了几个appointTime
的值,感觉本质来说,主要是以appointTime
时间为基准,一半范围(这里是3天),找到一个最靠近当前时间的日期,超过就以当前日期为最靠近日期,然后从这个日期往前找7天即可
所以把上面的逻辑翻译成代码,借用LocalDate
和Stream.iterate
就能构建题主想要的答案
public static List<LocalDate> findWithScope(String appointTime, long scope) { long half = scope / 2;
LocalDate appointDatetime = LocalDate.parse(appointTime);
LocalDate now = LocalDate.now();
// 超过一半范围的日期
LocalDate afterHalfDate = appointDatetime.plusDays(half);
LocalDate initDate = afterHalfDate;
// 如果一半范围的日期超过当前时间,则初始日期以当前时间为准
if (afterHalfDate.isAfter(now)) {
initDate = now;
}
// Stream.iterate的方法签名就是以第一个参数为基准,用第二个参数的方法生成下一个元素,依此类推
List<LocalDate> dates = Stream.iterate(initDate, localDate -> localDate.minusDays(1l))
.limit(scope)
.collect(Collectors.toList());
return dates;
}
回答:
取传入的前三天+传入时间+传入的后三天
循环判断时间是否大于当前时间,大于的话就-7天
最后再排下序
以上是 如何根据传入时间,获取附近7条日期并且不可超出当前时间 的全部内容, 来源链接: utcz.com/p/944083.html