Как получить первый и последний день месяца
Короткий ответ
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() — Создаёт дату из года, месяца и дня.