Как разобрать время «среда 6 ноября 16:43:54 +0000 2019» в LocalDateTime в Java - PullRequest
1 голос
/ 06 ноября 2019

Я пытаюсь выполнить синтаксический анализ Wed Nov 6 16:43:54 +0000 2019 в LocalDateTime, но возвращается следующее исключение - Текст 'Ср 6 ноября 16: 23: 3 +0000 2019' не может быть проанализирован с индексом 0

var formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss ZZZZ yyyy");
var createdTime = LocalDateTime.parse(summaryEvent.getStartTime(), formatter);

Ответы [ 3 ]

2 голосов
/ 06 ноября 2019

У вас проблема с вашим Locale. Чтобы исправить это, используйте форматер с Locale.US, например. Кроме того, вы можете использовать только один Z вместо ZZZZ:

var formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss Z yyyy", Locale.US)
1 голос
/ 06 ноября 2019

Этот шаблон будет анализировать как то, что вы указали в качестве входного параметра, так и вход, указанный в вашем Исключении .

"E MMM d H:mm:s Z yyyy"

Пример:

    String str = "Wed Nov 6 16:23:3 +0000 2019";
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("E MMM d H:mm:s Z yyyy");
    LocalDateTime createdTime = LocalDateTime.parse(str, formatter);
    System.out.println(createdTime);

Вывод:

2019-11-06T16:23:03

Ошибка could not be parsed at index 0 показывает, где не удалось выполнить синтаксический анализ вашего ввода для предоставленного шаблона. Индекс 0 говорит, что он был на первом поле, должен был быть всего один E для сокращенного дня недели.

Кроме того, на тестовом входе из вашего исключения Wed Nov 6 16:23:3 +0000 2019 есть только одна цифра для дня 6 вместо 06 и для секунд 3 вместо 03, поэтому также скорректировал шаблонне требовать двух цифр для этих полей.

0 голосов
/ 06 ноября 2019

Ошибка, которую вы делаете с ZZZZ. Попробуйте это:

var formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss Z yyyy");
var x =  LocalDateTime.parse("Wed Nov 06 16:43:54 +0000 2019", formatter);

println(x)
// 2019-11-06T16:43:54
...