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.