Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

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

Короткий ответ

withDayOfMonth(1) даёт первое число, TemporalAdjusters.lastDayOfMonth() — последнее:

void main() {
    var date = LocalDate.of(2026, 2, 17);
 
    IO.println(date.withDayOfMonth(1));
    IO.println(date.with(TemporalAdjusters.lastDayOfMonth()));
}

Результат:

2026-02-01
2026-02-28

Через YearMonth

YearMonth описывает месяц целиком и знает его длину:

void main() {
    var month = YearMonth.of(2028, 2);
 
    IO.println(month.atDay(1));
    IO.println(month.atEndOfMonth());
    IO.println(month.lengthOfMonth());
}

Результат:

2028-02-01
2028-02-29
29

Все дни месяца

datesUntil() возвращает поток дат:

void main() {
    var month = YearMonth.of(2026, 3);
    long weekends = month.atDay(1).datesUntil(month.atEndOfMonth().plusDays(1))
            .filter(d -> d.getDayOfWeek().getValue() >= 6)
            .count();
 
    IO.println(weekends);
}

Результат:

9

Частая ошибка

Считать, что в месяце всегда 30 или 31 день. Задать день вручную опасно — в феврале такого числа может не быть:

void main() {
    LocalDate.of(2026, 2, 30);
}

Результат:

Exception in thread "main" java.time.DateTimeException: Invalid date 'FEBRUARY 30'

Функции из этого ответа

  • LocalDate.of() — Создаёт дату из года, месяца и дня.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.