Я использую https://github.com/JakeWharton/ThreeTenABP в своем проекте.
У меня есть org.threeten.bp
ZonedDateTime: 2019-07-25T14:30:57+05:30[Азия/Калькутта]
Как я могу распечатать это с добавлением часов часового пояса? т.е. результат должен иметь 2019-07-25T20:00:57
Получите смещение в виде секунд от 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
Ваше время уже с этим дополнением компенсировано. Если вы установите смещение
+00:00
, вы получите2019-07-25T09:00:57+00:00
. Также вы можете посмотреть ответ Дэдпула, чтобы узнать, как это сделать. Но на мой взгляд, это лишнее.