Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
04 Апр 2023
2 мин
108

Расчёт количества дней между двумя датами в Joda-Time

Часто в программировании на Java возникает необходимость рассчитать количество дней между двумя датами. Для этой задачи идеально подходит библиотека

Часто в программировании на Java возникает необходимость рассчитать количество дней между двумя датами. Для этой задачи идеально подходит библиотека Joda-Time, но её использование может вызвать некоторые сложности у начинающих разработчиков. Рассмотрим типичную проблему на примере.

Предположим, есть два объекта DateTime — начальная и конечная даты, и требуется найти количество дней между ними. Если начальная дата — понедельник, а конечная — вторник, то ожидается, что возвращаемое значение будет равно 1, независимо от часов/минут/секунд начальной и конечной дат.

Код Days.daysBetween(start, end).getDays() может вернуть 0, если начальная дата установлена на вечер, а конечная — на утро следующего дня. Это происходит из-за того, что метод daysBetween() считает полные дни между двумя датами, и если конечная дата наступает раньше, чем проходит полных 24 часа от начальной, то количество дней будет равно 0.

Для решения этой проблемы можно использовать метод withTimeAtStartOfDay(), который устанавливает время даты на начало дня (00:00), тем самым «игнорируя» часы, минуты и секунды даты.

Вот пример кода, который рассчитывает количество дней между двумя датами, учитывая только дату, а не время:

DateTime start = new DateTime(2020, 1, 1, 18, 0, 0, 0); // 1 января 2020 года, 18:00
DateTime end = new DateTime(2020, 1, 2, 6, 0, 0, 0); // 2 января 2020 года, 6:00
int days = Days.daysBetween(start.withTimeAtStartOfDay(), end.withTimeAtStartOfDay()).getDays(); // вернёт 1

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

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий