org.threeten.bp.format.DateTimeParseException: текст «Сб, 19 сентября 2020 г., 07:14 по тихоокеанскому времени» не может быть проанализирован по индексу 25 в $.root.bsa[0].posted

Я пытаюсь разобрать дату, которая выглядит так: Sat Sep 19 2020 07:14 AM PDT в ZonedDateTime.

Я использую этот форматтер

DateTimeFormatter.ofPattern(
  "EEE MMM dd yyyy hh:mm a zzz",
  Locale.US
)

и я пытаюсь преобразовать строку с помощью

ZonedDateTime.parse(
  value,
  formatter
)

Однако это вызывает следующее исключение: org.threeten.bp.format.DateTimeParseException: Text 'Sat Sep 19 2020 07:14 AM PDT' could not be parsed at index 25 at $.root.bsa[0].posted

Я не совсем уверен, где ошибка в моей строке формата даты: я прогнал ее через http://www.fileformat.info/tip/java/simpledateformat.html для проверки, но похоже, что форматирование там правильное.

Дополнительный контекст: этот код выполняется в адаптере Moshi и в приложении для Android:

class ZonedDateTimeAdapter {
    private val formatter = DateTimeFormatter.ofPattern( "EEE MMM dd yyyy hh:mm a z", Locale.US )

    @FromJson
    fun fromJson(value: String): ZonedDateTime {
        return ZonedDateTime.parse( value, formatter )
    }

    @ToJson
    fun toJson(value: ZonedDateTime): String {
        return value.toString()
    }
}

person Jonathan Chiou    schedule 19.09.2020    source источник
comment
Одного z достаточно.   -  person akuzminykh    schedule 19.09.2020
comment
Спасибо за информацию! К сожалению, это не проблема, поскольку я все еще не могу разобрать строку.   -  person Jonathan Chiou    schedule 19.09.2020
comment
Не удается воспроизвести демонстрацию   -  person Eklavya    schedule 19.09.2020
comment
Может эта тема вам поможет. stackoverflow.com/questions/44743139/   -  person Arthur Maciel Gomes    schedule 19.09.2020
comment
@Rono Я запускаю код в экосистеме Android с портом Android github.com/JakeWharton/ThreeTenABP: возможно, это может повлиять на вещи   -  person Jonathan Chiou    schedule 19.09.2020
comment
Нет, @ArthurMacielGomes, Джонатан Чиоу уже делает то, что говорят там ответы (указание формата через средство форматирования).   -  person Ole V.V.    schedule 19.09.2020
comment
Пробовал на ThreeTen Backport (правда, не на Android-адаптации). Получил 2020-09-19T07:14-07:00[Canada/Yukon], немного удивлен выбором часового пояса, но никаких исключений не получил,   -  person Ole V.V.    schedule 19.09.2020
comment
Это странно. Извините, у меня нет предложений.   -  person Ole V.V.    schedule 20.09.2020
comment
Какой результат вы получите, если попытаетесь отформатировать ZonedDateTime летом, скажем, в часовом поясе Америки/Монреаля, используя тот же форматтер? Спрашиваю, потому что индекс 25 находится там, где PDT, поэтому проблема с аббревиатурой часового пояса. Также вы проверяли свою строку на наличие непечатаемых символов?   -  person Ole V.V.    schedule 20.09.2020


Ответы (1)


Вы пробовали так?

String s = "Sat Sep 19 2020 07:14 AM PDT";
ZonedDateTime z = ZonedDateTime.parse(s, DateTimeFormatter.ofPattern(
                "EEE MMM dd yyyy hh:mm a z"));
System.out.println(z);

Отпечатки

2020-09-19T07:14-07:00[America/Los_Angeles]
person WJS    schedule 19.09.2020
comment
Я уже делаю это: я обновил свой код, чтобы вместо этого использовать жестко запрограммированный суббота, 19 сентября 2020 г., 07:14 PDT, и проблема все еще сохраняется. - person Jonathan Chiou; 19.09.2020
comment
Код содержится в адаптере moshi: ``` class ZonedDateTimeAdapter { private val formatter = DateTimeFormatter.ofPattern( EEE MMM dd yyyy hh:mm a z, Locale.US ) @FromJson fun fromJson(value: String): ZonedDateTime { return ZonedDateTime. parse(value, formatter) } @ToJson fun toJson(value: ZonedDateTime): String { return value.toString() } } ``` - person Jonathan Chiou; 19.09.2020