org.threeten.bp.format.DateTimeParseException: текст «2018-07-22T14:00:00-03:00» не может быть проанализирован по индексу 19

    public static String formatter(String dateInPattern, String dateOutPattern) {
    OffsetDateTime dateInPatternFormat = OffsetDateTime.parse(dateInPattern, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"));
    Date dateInValue = DateTimeUtils.toDate(Instant.parse(dateInPatternFormat.toString()));
    OffsetDateTime dateOutPatternFormat = OffsetDateTime.parse(dateOutPattern);

    return dateOutPatternFormat.format(DateTimeFormatter.ofPattern(dateInValue.toString()));

}

Мне нужно ввести дату в этом шаблоне yyyy-MM-dd'T'HH:mm:ss'Z', это равно (2018-07-22T14:00:00-03:00). И мне нужен вывод в этом шаблоне dd/MM/yyyy

Помогите мне, пожалуйста.

У меня было много проблем с датой на Android :(


person Alan Bastos    schedule 27.09.2018    source источник
comment
Хотя принятый ответ помог понять общую картину, давайте также объясним ошибку в заголовке. Instant всегда в формате UTC, анализируемая строка должна следовать шаблону yyyy-MM-dd'T'HH:mm:ss.sssZ. Вы предоставили строку со смещением по времени, поэтому синтаксический анализ не удался. Та же входная строка может быть правильно проанализирована как OffsetDateTime.   -  person Eugen Pechanec    schedule 28.09.2018
comment
Извините, я не совсем понимаю, что вы пытаетесь сделать. Уточните, какие два аргумента вы передаете методу formatter и какое возвращаемое значение вам требуется, используя примеры.   -  person Ole V.V.    schedule 28.09.2018
comment
Когда вы используете ThreeTenABP (или ThreeTen Backport), полностью избегайте устаревшего и плохо спроектированного класса Date. ThreeTenABP обладает всеми необходимыми функциями, поэтому преобразование в Date просто означает дополнительное и ненужное усложнение.   -  person Ole V.V.    schedule 28.09.2018
comment
Мне нужно было прочитать дату, которая представляет собой строку yyyy-MM-dd'T'HH: mm: ss'Z ', и иметь возможность выводить ее как dd/MM/yyyy   -  person Alan Bastos    schedule 28.09.2018


Ответы (1)


Ваш код очень запутанный, со странными именами, и вы, кажется, смешиваете строки pattern, например. yyyy-MM-dd со строками value, например. 2018-07-22.

Строка значения 2018-07-22T14:00:00-03:00 может быть преобразована в OffsetDateTime без указания DateTimeFormatter, так как это формат по умолчанию для OffsetDateTime.

Если затем вам нужно отформатировать как dd/MM/yyyy, используйте DateTimeFormatter.

Не знаю, почему ваш метод принимает 2 параметра.

Пример:

String input = "2018-07-22T14:00:00-03:00";
OffsetDateTime offsetDateTime = OffsetDateTime.parse(input);
String output = offsetDateTime.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
System.out.println(output); // prints: 22/07/2018
person Andreas    schedule 27.09.2018