Если вы предпочитаете делать это без какого-либо цикла или итерации, это просто требует некоторой хитрости:
LocalDate firstPayment = LocalDate.of(2015, Month.JANUARY, 1);
// The first payment in May 2018 must be within the first 14 days of May.
long weeksAfterFirst
= ChronoUnit.WEEKS.between(firstPayment, LocalDate.of(2018, Month.MAY, 14));
// We need an even number of weeks
if (weeksAfterFirst % 2 != 0) {
weeksAfterFirst--;
}
LocalDate firstInMay = firstPayment.plusWeeks(weeksAfterFirst);
System.out.println(firstInMay);
Это печатает
2018-05-03
Для того, как приступить к выполнению такой задачи, одним из первых шагов является изучение библиотеки даты и времени, чтобы узнать о возможностях. Ссылка на учебник: Обучающая программа Oracle: Дата и время , объясняющая, как использовать java.time
.