LocalDate, LocalTime и LocalDateTime

Базовый Java
≈ 2 мин чтения

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

Не каждое значение времени должно быть привязано к конкретной точке Земли. Дата рождения — это прежде всего календарный день, время начала ежедневной планёрки — время суток, а запись «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);
LocalDateTime не является временной меткой. Без часового пояса или смещения одно и то же локальное время может соответствовать разным моментам на временной шкале. Если нужен именно однозначный момент, для этого есть другие типы.