Локальное время с привязкой к поясу в Java
ZonedDateTime объединяет дату, время и
ZoneId. Так хранят момент, когда важно
и местное время на стенах, и правило смещения для
этого региона. Значение неизменяемо, как у остальных
типов java.time.
Текущую отметку в поясе берут now. Фиксированную
дату и часы задают через of:
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
ZoneId utc = ZoneId.of("UTC");
ZonedDateTime live = ZonedDateTime.now(utc);
ZonedDateTime fixed = ZonedDateTime.of(
2024, 12, 31, 23, 59, 59, 0, utc
);
System.out.println(live);
System.out.println(fixed);
}
}
Из зонированной отметки получают toLocalDate,
toLocalTime, toLocalDateTime и
toInstant. Последний шаг переводит на
шкалу UTC с учетом смещения:
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Main {
public static void main(String[] args) {
ZonedDateTime meet = ZonedDateTime.of(
2024, 6, 1, 18, 0, 0, 0,
ZoneId.of("Europe/Berlin")
);
Instant point = meet.toInstant();
System.out.println(point);
}
}
Сдвиг на Duration или Period работает
как у LocalDateTime, но зона сохраняется
в результате. При неоднозначных переходах DST
библиотека выбирает согласованное правило.
Создайте отметку 2024-07-04 12:00 в зоне
America/New_York и выведите ее в ISO-формате.
Переведите текущий ZonedDateTime в системной
зоне в Instant и выведите epoch в секундах.