java.text.ParseException: не разбираемая дата: «2018-05-23T06: 39: 37 + 0000» - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь создать Date из String, полученного с сервера.String:

2018-05-23T06: 39: 37 + 0000

Таким образом, правильный формат должен быть:

yyyy-MM-dd'T'HH: mm: ss.SSSZ

Вот мой код:

String createdDate = comment.getCreatedDateTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US);
try {
    Date parsedDate = simpleDateFormat.parse(createdDate);
    createdDate = parsedDate.toString();
} catch (ParseException ex) {
    ex.printStackTrace();
}
mCommentDate.setText(createdDate);

Я не знаю, есть ли способсделать это, потому что после этого я хотел бы снова проанализировать следующий формат:

дд / мм / гггг чч: мм

Я пытался проанализироватьоригинал String, используя этот последний формат напрямую, но я получаю то же исключение.

Есть предложения?

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Хорошо, первая ошибка (как вы указали) в том, что у меня не было миллисекунд на оригинале String.

После удаления «SSS» из simpleDateFormat он работает как брелок,Итак, это окончательный код:

String createdDate = comment.getCreatedDateTime();
SimpleDateFormat defaultDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault());
try {
    Date parsedDate = defaultDateFormat.parse(createdDate);
    SimpleDateFormat finalDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm", Locale.getDefault());
    createdDate = finalDateFormat.format(parsedDate);
} catch (ParseException ex) {
    ex.printStackTrace();
}
mCommentDate.setText(createdDate);
0 голосов
/ 23 мая 2018

Я вижу, что вы решили свою собственную проблему с небольшой помощью из комментариев, однако я бы посоветовал вам серьезно рассмотреть LocalDate , так как старые классы Date иногда доставляют немало хлопот.

На самом деле, поскольку ваше входящее значение имеет TimeZone, вам нужно будет использовать ZonedDateTime для анализа вашего ввода.

String createdDate = "2018-05-23T06:39:37+0000";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
ZonedDateTime localDate = ZonedDateTime.parse(createdDate, formatter);
System.out.println(localDate.format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm")));

Выход:

23/05/2018 06: 39

0 голосов
/ 23 мая 2018

Указанная дата ввода String формат

2018-05-23T06: 39: 37 + 0000

неверно, поэтому вы получаете ParseExceptionпоскольку миллисекунда (SSS) часть отсутствует в вашем формате даты гггг-мм-дд'т'чч: мм: сс. SSS Z

Поэтому, пожалуйста, попробуйте с

2018-05-23T06: 39: 37.235-0530

, поэтому приведенный ниже код должен работать

String createdDate = comment.getCreatedDateTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.US);
    try {
        Date parsedDate = simpleDateFormat.parse(createdDate);
        createdDate = parsedDate.toString();
        System.out.println(parsedDate.toString());
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
mCommentDate.setText(createdDate);
...