Есть список имен и дней рождения. Нужно получить список имен, у которых в ближайшие две недели будет день рождения, используя (желательно) java.time. Знаю, что здесь уже был точно такой же вопрос, но его решение мне не сильно помогло. Возможно, у меня есть ошибка где-то в коде, тогда сердечно прошу указать мне на нее. Вот код:
String pattern = "MM/dd/yyyy";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
LocalDate currentDay = LocalDate.now();
for (Customer customer : custDataDes) {
LocalDate birthday = LocalDate.parse(customer.birthDate, formatter);
long days = ChronoUnit.DAYS.between(birthday, currentDay);
System.out.println(days);
}
Конкретно, я застрял после нахождения разницы между датами. Выставляя условие вывода if (days <= 14)
упираюсь в ограничение по годам.`
Извлечь месяц и день из даты рождения.
Сформировать дату с текущим годом и полученными месяцем и днём.
Посчитать разницу в днях с текущей датой. Если она отрицательная, повторить со следующим годом.
Как вариант:
String pattern = "MM/dd/yyyy";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
DateTimeFormatter yearFormatter = DateTimeFormatter.ofPattern("yyyy");
LocalDate currentDay = LocalDate.now();
for (Customer customer : custDataDes) {
LocalDate birthday = LocalDate.parse(customer.birthDate.substring(0, 6) + yearFormatter.format(currentDay), formatter);
long days = ChronoUnit.DAYS.between(currentDay, birthday);
System.out.println(days);
}
Спасибо всем за предложенные варианты. Я пришел к такому решению: создал дату с прибавленными 14 днями к текущей, привел ее и текущую дату к формату мм.дд и отсортировал.
LocalDate currentDay = LocalDate.now();
MonthDay curMonthDay = MonthDay.from(currentDay);
Map<LocalDate, String> birthMap = new HashMap<>();
for (Customer customer : custDataDes) {
LocalDate birthday = LocalDate.parse(customer.birthDate, formatter);
MonthDay monthDayBirth = MonthDay.from(birthday);
LocalDate cur14 = currentDay.plusDays(14);
MonthDay mon14 = MonthDay.from(cur14);
if (monthDayBirth.isAfter(curMonthDay) ||
curMonthDay.equals(monthDayBirth)) {
if (monthDayBirth.isBefore(mon14))
birthMap.put(birthday, names);
}
}
System.out.println("Ближайшие именинники: " + "\n" + birthMap);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Кто-нибудь может подсказать, как реализовать подобный TabLayout?