使用java从给定日期范围内的广播日历获取星期一日期列表

问题描述 投票:0回答:2

我的日期范围是 2024 年 10 月 7 日到 2024 年 12 月 29 日。我需要获取广播日历的所有周开始日期,即该范围内的所有星期一日期。尝试做如下的事情。我只能开始一个日期,想扩展它以获取所有星期一日期的列表。 10 月 7 日 10 月 14 日 10 月 21 日 10 月 28 日 11 月 4 日 11 月 11 日 11 月 18 日 11 月 25 日 12 月 2 日 12月9日 12月16日 12 月 23 日

 @Test
public void toBroadcastStartDate() {
    Date dateFormate = new Date("Nov 05, 2024 12:00 AM EST");
    BroadcastCalendar broadcastCalendar = new BroadcastCalendar();
    LocalDate broadcastStartDate = broadcastCalendar.getWeekStart(Instant.ofEpochMilli(dateFormate.getTime()).atZone(ZoneId.of("UTC")).toLocalDate());
    System.out.println("check here "+Date.from(broadcastStartDate.atStartOfDay(ZoneId.systemDefault()).toInstant()));
}
java date calendar java-time
2个回答
1
投票

如果您知道您的开始日是星期一,您可以这样做。

var start = LocalDate.of(2024, 10, 7);
var end = LocalDate.of(2024, 12, 29);
        
var mondays = start.datesUntil(end, Period.ofWeeks(1)).toList();
System.out.println(mondays);

1
投票

您可以简单地循环,直到当前日期匹配或超过结束日期。像这样的东西:

LocalDate startDate = LocalDate.of(2024, 10, 7);
LocalDate endDate = LocalDate.of(2024, 12, 29);
List<LocalDate> mondays = new ArrayList<>();
LocalDate monday = startDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));
while (monday.isBefore(endDate) || monday.isEqual(endDate)) {
      mondays.add(monday);
      monday = monday.plusDays(7);
}

现在

mondays
包含2024年10月7日至2024年12月29日(含)之间的所有星期一。

© www.soinside.com 2019 - 2024. All rights reserved.