Научитесь преобразовывать 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