LocalDate, LocalTime и LocalDateTime
Локальные значения: дата и время без часового пояса
Не каждое значение времени должно быть привязано к конкретной точке Земли.
Дата рождения — это прежде всего календарный день, время начала ежедневной планёрки — время суток,
а запись «2026-09-18 14:30» может описывать локальное расписание, если часовой пояс хранится отдельно или вообще не нужен.
Для таких случаев в java.time есть три основных класса.
LocalDate— дата без времени и часового пояса;LocalTime— время суток без даты и часового пояса;LocalDateTime— дата и время вместе, но всё ещё без часового пояса.
LocalDate date = LocalDate.of(2026, 9, 18);
LocalTime time = LocalTime.of(14, 30);
LocalDateTime lesson = LocalDateTime.of(date, time);
Здесь lesson означает «18 сентября 2026 года, 14:30»,
но из него невозможно понять, какой это момент в Ереване, Берлине или Токио.
Это не недостаток класса, а его смысл.
Создание и чтение значений
Чаще всего значения создают через of(), получают текущие значения через
now() или разбирают стандартную ISO-строку через parse().
Нужные компоненты можно читать обычными методами.
LocalDate date = LocalDate.parse("2026-09-18");
int year = date.getYear();
Month month = date.getMonth();
DayOfWeek day = date.getDayOfWeek();
Классы проверяют корректность значений. Например,
LocalDate.of(2026, 2, 30) не создаст «странную» дату,
а выбросит DateTimeException.
Объекты неизменяемы
Классы java.time неизменяемы: операция не переписывает существующий объект,
а возвращает новый. Это особенно важно замечать в коде с методами plus...,
minus... и with....
LocalDate today = LocalDate.of(2026, 9, 18);
today.plusDays(1);
System.out.println(today); // 2026-09-18
Чтобы сохранить результат, его нужно присвоить:
LocalDate tomorrow = today.plusDays(1);