Научитесь преобразовывать указанное мгновенное время(в формате 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 и наоборот, корректируя смещения поясов.