Вывести список ближайших дат

178
23 декабря 2018, 07:30

Есть список имен и дней рождения. Нужно получить список имен, у которых в ближайшие две недели будет день рождения, используя (желательно) 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) упираюсь в ограничение по годам.`

Answer 1

Извлечь месяц и день из даты рождения.
Сформировать дату с текущим годом и полученными месяцем и днём.
Посчитать разницу в днях с текущей датой. Если она отрицательная, повторить со следующим годом.

Answer 2

Как вариант:

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);
}
Answer 3

Спасибо всем за предложенные варианты. Я пришел к такому решению: создал дату с прибавленными 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);
READ ALSO
самопроизвольное отключение WebSocket

самопроизвольное отключение WebSocket

Есть такой коннект Вебсоккета, использую библиотеку:

157
Парсинг с jsoup

Парсинг с jsoup

Дело такоеПолучаю в ответе на запрос на сайт такой html код

164
Кастомный TabLayout с разной шириной TabItem

Кастомный TabLayout с разной шириной TabItem

Кто-нибудь может подсказать, как реализовать подобный TabLayout?

145