Конвертация между LocalDateTime и ZonedDateTime

Научитесь преобразовывать LocalDateTime в ZonedDateTime и наоборот, используя простые для понимания примеры Java.

Экземпляр LocalDateTime представляет дату-время(с точностью до наносекунды) без часового пояса в календарной системе ISO-8601. Экземпляр LocalDateTime представляет точку на локальной временной шкале. Он не может представлять момент на универсальной временной шкале без дополнительной информации, такой как смещение или часовой пояс.

Экземпляр ZonedDateTime представляет момент на универсальной временной шкале. Это комбинация даты, времени и информации о зоне.

1. LocalDateTime -> ZonedDateTime

Для преобразования из LocalDateTime в ZonedDateTime мы должны добавить смещение зоны к локальной дате-времени. Какую бы информацию о зоне мы ни добавили, сконструированный объект будет представлять момент на универсальной временной шкале с настроенным смещением.

ZonedDateTime = LocalDateTime + ZoneId

LocalDateTime ldt = LocalDateTime.now(); //Local date timeZoneId zoneId = ZoneId.of( "Asia/Kolkata" ); //Zone informationZonedDateTime zdtAtAsia = ldt.atZone( zoneId ); //Local time in Asia timezoneZonedDateTime zdtAtET = zdtAtAsia.withZoneSameInstant( ZoneId.of( "America/New_York" ) ); //Sama time in ET timezone

Вывод программы:

 2018-07-15T11:27:46.203763100+05:30[Азия/Калькутта]2018-07-15T01:57:46.203763100-04:00[Америка/Нью_Йорк]

2. ZonedDateTime -> LocalDateTime

Используйте метод ZonedDateTime.toLocalDateTime() для получения локальной даты и времени без информации о часовом поясе.

ZonedDateTime zdtAtET = ZonedDateTime.now(ZoneId.of("America/New_York"));LocalDateTime ldt = zdtAtET.toLocalDateTime();System.out.println(zdtAtET);System.out.println(ldt);

Вывод программы:

 2018-07-15T01:59:52.054839900-04:00[Америка/Нью_Йорк]2018-07-15T01:59:52.054839900 

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

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