Преобразование Instant в ZonedDateTime в Java

Научитесь преобразовывать указанное мгновенное время(в формате UTC) в ZonedDateTime(в определенном поясе) с помощью простых примеров на Java.

1. Разница между Instant и ZonedDateTime

Мгновение — это точка на шкале времени UTC без какой-либо информации о часовом поясе, связанной с ней. Обычно для получения мгновения используются системные часы UTC, поэтому смещение его зоны равно нулю.

ZonedDateTime — это точка на временной шкале с соответствующим часовым поясом. Мы получаем экземпляр ZonedDateTime в определенном часовом поясе, корректируя момент UTC с помощью смещения пояса для этого часового пояса.

ZonedDateTime = Instant + корректировка Zoneoffset

2. Преобразовать Instant в ZonedDateTime

Существует два простых способа получить зонный экземпляр даты и времени для заданного момента времени в формате UTC:

2.1. Мгновенно.вЗоне(zoneId)

Метод atZone() объединяет момент времени с часовым поясом(указанным zoneId) для создания ZonedDateTime.

Instant instant = Instant.now();ZonedDateTime istZdt = instant.atZone(ZoneId.of("Asia/Kolkata"));

2.2. ZonedDateTime.ofInstant(instant, zoneId)

Метод ofInstant() получает экземпляр ZonedDateTime в указанном часовом поясе из указанного Instant.

Instant instant = Instant.now();ZonedDateTime istZdt = ZonedDateTime.ofInstant(instant, ZoneOffset.of("+05:30"));

3. От ZonedDateTime к Instant

Обратное преобразование из ZonedDateTime в Instant довольно просто. Используйте метод zonedatetime.toInstant(), который возвращает Instant, представляющий ту же точку на временной шкале UTC.

ZonedDateTime zdt = ZonedDateTime.now();Instant instant = zdt.toInstant(); //in UTC

4. Заключение

В этом коротком руководстве по дате и времени на Java мы научились преобразовывать Instant в ZonedDateTime и наоборот, корректируя смещения поясов.

Исходный код на Github

Прокрутить вверх