首页 > 解决方案 > 如何显示两个日期之间的所有星期一?

问题描述

我尝试在两个日期之间显示所有星期一,但我不知道该怎么做。我想要求用户使用扫描仪输入两个日期,以输出所有星期一。

    String s = "2020-07-20";
    String e = "2020-09-20";
    LocalDate start = LocalDate.parse(s);
    LocalDate end = LocalDate.parse(e);
    List<LocalDate> totalDates = new ArrayList<>();

    while (!start.isAfter(end)) {
        totalDates.add(start);
        start = start.plusDays(1);

    }

标签: javadate

解决方案


要获得第一个星期一,请使用:

LocalDate monday = start.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));

现在您必须处理一个极端情况:如果start和之间没有星期一end怎么办?这意味着这里计算的星期一是在以下时间之后end

if (monday.isAfter(end)) {
    totalDates = List.of();
}

之后,您可以使用方便的方法获得一系列星期一datesUntil

totalDates = monday.datesUntil(end, Period.ofWeeks(1)).collect(Collectors.toList());

请注意,datesUntil不包括结束日期。如果您需要包含结束日期,请传入end.plusDays(1).


推荐阅读