如何根据传入时间,获取附近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天即可

所以把上面的逻辑翻译成代码,借用LocalDateStream.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

回到顶部