Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Получение первого и последнего дня месяца в Java threeten

Быстрый ответ

Для определения первого и последнего дня текущего месяца можно воспользоваться классами LocalDate и YearMonth следующим образом:

  • localDate.withDayOfMonth(1): Получение первого дня месяца.
  • yearMonth.atEndOfMonth(): Получение последнего дня месяца.
Java
Скопировать код
import org.threeten.bp.LocalDate;
import org.threeten.bp.YearMonth;

LocalDate today = LocalDate.now();
LocalDate firstDay = today.withDayOfMonth(1);
LocalDate lastDay = YearMonth.from(today).atEndOfMonth();

Такой код позволяет получить даты начала и окончания текущего месяца для структур типа LocalDate.

Кинга Идем в IT: пошаговый план для смены профессии

Заглубляемся: Немного о TemporalAdjusters

Пользуюя TemporalAdjusters, можно сделать работу с датами более гибкой:

Java
Скопировать код
import org.threeten.bp.temporal.TemporalAdjusters;

LocalDate firstDayAdjusted = today.with(TemporalAdjusters.firstDayOfMonth());
LocalDate lastDayAdjusted = today.with(TemporalAdjusters.lastDayOfMonth());

Для повышения читабельности и удобства поддрежки кода рассмотрите использование статического импорта:

Java
Скопировать код
import static org.threeten.bp.temporal.TemporalAdjusters.firstDayOfMonth;
import static org.threeten.bp.temporal.TemporalAdjusters.lastDayOfMonth;

LocalDate firstDayClean = today.with(firstDayOfMonth());
LocalDate lastDayClean = today.with(lastDayOfMonth());

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

В некоторых случаях может быть полезным использовать класс YearMonth:

Java
Скопировать код
YearMonth yearMonthInstance = YearMonth.from(today);
LocalDate firstDayYearMonth = yearMonthInstance.atDay(1);
LocalDate lastDayYearMonth = yearMonthInstance.atEndOfMonth();

YearMonth идеально подходит для работы с месячными циклами, особенно в бизнес-логике.

На грани: Продвинутое использование и нестандарные случаи

Получение последнего дня, зная длину месяца

Если вам известна длина месяца, вы можете воспользоваться методом plusDays():

Java
Скопировать код
LocalDate lastDayKnownLength = firstDay.plusDays(monthLength – 1);

Учитывайте, что отсчёт начинается с первого дня, поэтому следует уменьшать общее число дней на единицу.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Создание даты вручную

Если требуется задать дату точно без учета текущего дня, работы способ:

Java
Скопировать код
LocalDate firstDaySpecific = LocalDate.of(year, month, 1);
LocalDate lastDaySpecific = firstDaySpecific.withDayOfMonth(
  firstDaySpecific.lengthOfMonth()
);

При выборе способов работы с датами всегда обсуждайте его с учетом бизнес-правил.

Визуализация

Представьте LocalDate как временную шкалу, на которой отмечены начало и конец месяца:

Markdown
Скопировать код
📏 Временная шкала: Январь --------------------------------- Февраль --------------------------------- Март

Первый день: 📌 – это начало месяца

Markdown
Скопировать код
Январь: [📌, 2, 3, ..., 31]

Последний день: 🎯 – это окончание месяца

Markdown
Скопировать код
Январь: [1, ..., 30, 🎯]

При использовании LocalDate можно точно определить ключевые даты.

Взвешиваем преимущества: LocalDate, TemporalAdjusters и YearMonth

Читабельность превыше всего

Используя методы вроде .with(firstDayOfMonth()), увеличивает понимание того, какие результаты можно ожидать от кода.

Оптимизация производительности

В средах с высокой нагрузков, сокращение числа вызовов методов в объектах типа LocalDate, таких как .withDayOfMonth(), может быть значимым.

Преимущество обслуживаемости

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

Полезные материалы

  1. ThreeTen-Backport – домашняя страница — вход в мир API java.time для пользователей Java 6 & 7.
  2. LocalDate (Java Platform SE 8) — официальная документация по Java LocalDate.
  3. SimpleDateFormat игнорирует месяц при парсинге (Stack Overflow) — обсуждение нюансов парсинга дат.
  4. Учебные пособия и примеры исходного кода — практические примеры для работы с датами в Java.
  5. DateTimeFormatter (Java Platform SE 8) — информация о форматировании дат с помощью DateTimeFormatter.
  6. Java LocalDate — подробное руководство по работе с LocalDate и LocalDateTime.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Как получить первый день текущего месяца с использованием LocalDate?
1 / 5