Статьи
YouTube-канал

Как получить последний день месяца

30 сентября 2020

Тэги: Java Java 8 Kotlin алгоритмы

При работе с датами часто бывает нужно получить последний день текущего месяца или года. Поскольку последний день года всегда равен 31 декабря, то мы можем напрямую создать эту дату с помощью метода LocalDate.of(). А вот последний день месяца зависит от конкретного месяца. Дней в месяце может быть 30 или 31, а для февраля и вовсе 28 или 29.

Чтобы не разбираться в логике работы календаря, начиная с Java 8 (а, значит, и в Kotlin) нам доступен специальный класс TemporalAdjusters. Он имеет несколько полезных методов, но в данном случае нас интересует lastDayOfMonth(), возвращающий специальный объект с интерфейсом TemporalAdjuster. Этот интерфейс содержит метод adjustInto(), который позволяет «выравнивать» любую переданную ему дату (или дату со временем) по определённому правилу. В нашем случае дата будет выровнена по последнему дню месяца.

val lastDateOfCurrentMonth = TemporalAdjusters.lastDayOfMonth()
    .adjustInto(LocalDate.now()) // выравниваем текущую дату
val lastDateTimeOfCurrentMonth = TemporalAdjusters.lastDayOfMonth()
    .adjustInto(LocalDateTime.now()) // выравниваем текущую дату и время

Как видите, метод adjustInto() одинаково хорошо работает и с датой, и с датой и временем. В последнем случае выравнивается только дата. Время остаётся без изменений.

Помимо метода lastDayOfMonth(), класс TemporalAdjusters предлагает также и другие методы с говорящими названиями:

  • lastDayOfYear() - последний день года
  • firstDayOfMonth() - первый день месяца
  • firstDayOfNextMonth() - первый день следующего месяца
  • firstDayOfYear() - первый день года
  • firstDayOfNextYear() - первый день следующего года

Но остальные «выравниватели» менее интересны, т.к. первый день месяца или года всегда равен 1, а последний день года всегда равен 31.


Облако тэгов

Kotlin, Java, Java 16, Java 11, Java 10, Java 9, Java 8, Spring, Spring Boot, Spring Data, SQL, PostgreSQL, Oracle, Hibernate, Collections, Stream API, многопоточность, ввод-вывод, Apache, maven, gradle, JUnit, YouTube, новости, ООП, алгоритмы, головоломки, rest, GraphQL, Excel, XML, json, yaml

Последние статьи


Комментарии

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

×

devmark.ru