Encodera

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

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

Справочник Java

ZonedDateTime

Дата и время в конкретном часовом поясе — с учётом летнего времени.

Доступно с: Java 8

Синтаксис

public final class ZonedDateTime implements Temporal, ChronoZonedDateTime<LocalDate>

Примеры

Одна встреча в разных городах:

void main() {
    ZonedDateTime berlin = ZonedDateTime.of(2025, 3, 14, 15, 0, 0, 0, ZoneId.of("Europe/Berlin"));
    ZonedDateTime tokyo = berlin.withZoneSameInstant(ZoneId.of("Asia/Tokyo"));
    ZonedDateTime newYork = berlin.withZoneSameInstant(ZoneId.of("America/New_York"));
    IO.println(berlin);
    IO.println(tokyo.toLocalTime());
    IO.println(newYork.toLocalTime());
}

Результат:

2025-03-14T15:00+01:00[Europe/Berlin]
23:00
10:00

Переход на летнее время: сутки длиной 23 часа:

void main() {
    ZoneId zone = ZoneId.of("Europe/Berlin");
    ZonedDateTime before = ZonedDateTime.of(2025, 3, 29, 12, 0, 0, 0, zone);
    ZonedDateTime after = before.plusDays(1);
    IO.println(Duration.between(before, after).toHours());
    IO.println(after.getOffset());
}

Результат:

23
+02:00

Примечания

Пояс задают названием из базы IANA (Europe/Berlin, America/New_York), а не смещением вроде +01:00: только название знает правила летнего времени. Текущее время в поясе — ZonedDateTime.now(zone), пояс компьютера — ZoneId.systemDefault().

См. также

  • Instant — Точный момент времени на временной шкале UTC — для логов, меток времени и замеров.
  • LocalDateTime — Дата и время без часового пояса — например, время встречи в календаре.
  • DateTimeFormatter.ofPattern() — Создаёт форматтер для вывода и разбора дат по шаблону вроде dd.MM.yyyy.

Вопросы и ответы по теме

В учебнике

  • Даты и время — Пакет java.time — LocalDate, LocalTime, LocalDateTime, арифметика дат, Period, Duration, ChronoUnit, часовые пояса и Instant.

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

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