#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
в javaDate
в другой зоне?
Ответ №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
. Я не вижу такого смещения в списке часовых поясов. Такое смещение использовалось в течение десятилетия в исторической Южной Африке.