-05:00
на самом деле не часовой пояс.Это просто смещение: разница в 5 часов отстает от UTC, и вы не можете отобразить его в одном часовом поясе.
На дату, которую вы используете (2 февраля 2018 г.), есть 47 часовых поясов, использующих-05:00
*, включая районы за пределами США - и многие из них не называют свои часовые пояса "EST", такие как Лима, которая использует "PET" (время Перу) или Богота, которая использует "COT""(Колумбийское время).Независимо от имен, используемых в каждом месте, все они используют -05:00
в дату и время, которое вы используете.
В любом случае, когда вы анализируете смещение, такое как -05:00
, API может 'не знаю, на какой часовой пояс вы ссылаетесь, по причинам, перечисленным выше (их больше одного, и сам API не может их решить).Вы должны произвольно выбрать часовой пояс, а затем преобразовать проанализированный ZonedDateTime
в эту зону:
....
ZonedDateTime time = ZonedDateTime.parse(origStr, DateTimeFormatter.ofPattern(origFormat));
// convert to some arbitrary timezone
time = time.withZoneSameInstant(ZoneId.of("America/New_York"));
Я выбрал "America / New_York", потому что это тот, который использует "EST"в феврале 2018. При этом ваш targetStr
будет:
2018-02-05T17: 25: 18 EST
Измените имя часового пояса на то, которое выхочу.Обратите внимание, что для дат в июне, когда в Нью-Йорке действует летнее время, будет возвращено «EDT».
*: я используюJDK 8 с файлами данных TZ 2018e, поэтому это число может отличаться в вашей среде.