Возврат дат от любой точки отсчёта до настоящего времени

В задании необходимо написать код, который возвращает все даты дня рождения до текущей даты. Тесты к заданию предполагают, что дата дня рождения может быть любой, но изначально в задании даны значения переменных дня рождения, от которого начинается отсчёт. Вот моя попытка написания кода.

public class Birthdays {
 
    public static void main(String[] args) {
 
        int day = 31;
        int month = 12;
        int year = 1990;
        System.out.println(collectBirthdays(year, month, day)); 
    }

    public static String collectBirthdays(int year, int month, int day) { 
        LocalDate birthday = LocalDate.of(year, month, day);
        LocalDate todayDate = LocalDate.now();
 
        DateTimeFormatter formatDate = DateTimeFormatter.ofPattern("dd.MM.yyyy - E", Locale.ENGLISH);
        int a = 0;
        String text = "";
 
        StringBuilder sb = new StringBuilder();
 
        while (birthday.isEqual(todayDate) || (birthday.isBefore(todayDate))) {
            text = a + " - " + birthday.format(formatDate);
 
            sb.append(text);
            sb.append(" ");
 
            System.out.println(text);
            a++;
            birthday = birthday.plusYears(1);
        }
        
        return "";
    }
}

С этим кодом не выполняются тесты, которые требуют других значений дня рождения.


Ответы (1 шт):

Автор решения: Jackkobec
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class CelebratedBirthday {
  public static void main(String[] args) {
    final List<LocalDate> celebratedBirthdays =
        getCelebratedBirthdays(LocalDate.parse("01.12.1990", DateTimeFormatter.ofPattern("dd.MM.yyyy")));
    celebratedBirthdays.forEach(celebratedBirthday ->
        System.out.println(celebratedBirthday.format(DateTimeFormatter.ofPattern("dd.MM.yyyy - E", Locale.ENGLISH))));
  }

  public static List<LocalDate> getCelebratedBirthdays(final LocalDate birthday) {
    if (birthday == null) {
      // your behavior for this case
    }
    final LocalDate currentDate = LocalDate.now();
    List<LocalDate> celebratedBirthdays = new ArrayList<>();
    if (birthday.isAfter(currentDate)) {
      return celebratedBirthdays;
    }

    if (currentDate.equals(birthday)) {
      celebratedBirthdays.add(birthday);
      return celebratedBirthdays;
    }

    LocalDate celebratedBirthday = birthday;
    while (celebratedBirthday.isBefore(currentDate)) {
      celebratedBirthdays.add(celebratedBirthday);
      celebratedBirthday = celebratedBirthday.plusYears(1);
    }

    return celebratedBirthdays;
  }
}
→ Ссылка