Хотите определить время преобразования в соответствии с определенным часовым поясом

#java #datetime #timezone #jodatime

#java #дата и время #Часовой пояс #jodatime

Вопрос:

Я получаю объект DateTime из внешней системы.
Я получаю дату, подобную 2012-06-20T13:30:00 05:30 . Внешняя система создала дату с помощью Joda-Time API.

Я не могу найти соответствующий формат даты для этого. Более того, я хочу преобразовать время в 09:00:00 01:30 (другой часовой пояс).

Комментарии:

1. Что такое 2012 ? Что такое 06 ? Что такое 20 ? Что такое 13 ? Что такое 30 ? Что такое 00 ? И т.д. …? Вот как вы определяете формат даты.

2. joda-time.sourceforge.net/apidocs/org/joda/time/…

3. Как я понимаю, вы хотите конвертировать joda DateTime в java Date в другой зоне?

Ответ №1:

Эта строка представляет дату, время суток и смещение от UTC.

Положительное смещение означает «впереди UTC», на восток. Отрицательный означает «за UTC», к западу. В вашем примере 05:30 это современное время Индии.

Этот формат формально определен стандартом ISO 8601. Этот стандарт очень полезен. Обязательно прочитайте страницу Википедии.

Библиотека Joda-Time и новый пакет java.time в Java 8 широко используют ISO 8601. Этот формат используется по умолчанию как для синтаксического анализа, так и для генерации строковых представлений значений даты и времени.

Просто передайте эту строку конструктору DateTime. И передайте объект time zone конструктору. Или позже вызовите withZone метод для настройки часового пояса.

 DateTimeZone timeZoneParis = DateTimeZone.forID( "Europe/Paris" );
DateTime dateTimeParis = new DateTime( myIsoString, timeZoneParis );
  

Меня смущает ваша ссылка на смещение 01:30 . Я не вижу такого смещения в списке часовых поясов. Такое смещение использовалось в течение десятилетия в исторической Южной Африке.