Возврат дат от любой точки отсчёта до настоящего времени
В задании необходимо написать код, который возвращает все даты дня рождения до текущей даты. Тесты к заданию предполагают, что дата дня рождения может быть любой, но изначально в задании даны значения переменных дня рождения, от которого начинается отсчёт. Вот моя попытка написания кода.
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;
}
}