Во-первых, кажется, что ваша строка может быть получена в результате вызова toString
на старомодном объекте java.util.Date
. Если это так, вы можете посмотреть, сможете ли вы получить сам объект Date
и преобразовать его с помощью DateTimeUtils
(из ThreeTenABP) и избавить себя от всех проблем с разбором.
Во-вторых, ваш код работает со встроенным java.time на моем настольном компьютере, и я не знаю, почему он не работает с бэкпортом. Возможное исправление для бэкпорта:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss OOOO yyyy", Locale.ENGLISH);
String inputString = "Wed Oct 17 06:12:19 GMT+05:30 2018";
String formattedDate = OffsetDateTime.parse(inputString, formatter)
.atZoneSameInstant(ZoneId.systemDefault())
.format(formatter);
System.out.println(formattedDate);
На моем компьютере в часовом поясе Европы/Копенгагена это выводит:
Ср 17 окт 02:42:19 GMT+02:00 2018
РЕДАКТИРОВАТЬ: Хотя не задокументировано, что бэкпорт поддерживает букву шаблона формата O
, приведенное выше работает на ThreeTen Backport 1.3.6 на моем Mac. Документированной альтернативой является следующий вариант шаблона формата:
DateTimeFormatter formatter
= DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss 'GMT'xxx yyyy", Locale.ROOT);
Если вы предпочитаете аббревиатуру часового пояса, например CEST
, а не смещение по Гринвичу, вы можете использовать исходный модуль форматирования для обратного форматирования в строку. Хитрость в том, что OOOO
в шаблоне формата анализирует GMT+05:30
и этот стиль смещения GMT или UTC в целом.
Я исправил еще одну ошибку в вашем коде: когда вы анализировали LocalDateTime
, вы теряли информацию о часовом поясе или смещении из строки, что приводило к неправильному времени. В частности, когда в строке было GMT+05:30
и вы делали .atOffset(ZoneOffset.UTC)
, время сбивалось на 5 часов 30 минут. Вместо этого используйте OffsetDateTime
для синтаксического анализа (если бы z
для имени зоны сработало, вам понадобился бы ZonedDateTime
).
Ссылка: Документация org.threeten.bp:format.DateTimeFormatter
включая буквы шаблона формата
person
Ole V.V.
schedule
17.10.2018
+05:30
), а не 20 (где написаноGMT
). - person Ole V.V.   schedule 17.10.2018