ZonedDateTime с часовым поясом, добавленным в формат печати

Я использую https://github.com/JakeWharton/ThreeTenABP в своем проекте.

У меня есть org.threeten.bp

ZonedDateTime: 2019-07-25T14:30:57+05:30[Азия/Калькутта]

Как я могу распечатать это с добавлением часов часового пояса? т.е. результат должен иметь 2019-07-25T20:00:57

Ваше время уже с этим дополнением компенсировано. Если вы установите смещение +00:00, вы получите 2019-07-25T09:00:57+00:00. Также вы можете посмотреть ответ Дэдпула, чтобы узнать, как это сделать. Но на мой взгляд, это лишнее.

KunLun 25.07.2019 19:07
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
1
404
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Получите смещение в виде секунд от ZonedDateTime

ZonedDateTime time = ZonedDateTime.parse("2019-07-25T14:30:57+05:30");
long seconds = time.getOffset().getTotalSeconds();

Теперь получите часть LocalDateTime от ZonedDateTime

LocalDateTime local = time.toLocalDateTime().plusSeconds(seconds);   //2019-07-25T20:00:57  

toLocalDateTime

Gets the LocalDateTime part of this date-time.

Если вы хотите получить местное время в формате UTC, используйте toInstant()

This returns an Instant representing the same point on the time-line as this date-time. The calculation combines the local date-time and offset.

Instant i = time.toInstant();   //2019-07-25T09:00:57Z

Ты не понял. Смещение +05:30 в вашей строке означает, что 5 часов 30 минут уже добавлены относительно времени по сравнению с UTC. Поэтому добавлять их еще раз не имеет никакого смысла.

Если вы хотите компенсировать смещение, просто преобразуйте дату и время в UTC. Например:

    ZonedDateTime zdt = ZonedDateTime.parse("2019-07-25T14:30:57+05:30[Asia/Calcutta]");
    OffsetDateTime utcDateTime = zdt.toOffsetDateTime().withOffsetSameInstant(ZoneOffset.UTC);
    System.out.println(utcDateTime);

Выход:

2019-07-25T09:00:57Z

Другие вопросы по теме