Страницы

Поиск по вопросам

понедельник, 24 февраля 2020 г.

java.text.ParseException: Unparseable date

#java


Столкнулся с проблемой, не работает следующий java - код:

String s_date = " Ср, 16 12 2015 16:24:31 GMT";
SimpleDateFormat sdf = new SimpleDateFormat( "     dd MM yyyy hh:mm:ss    " );
Date date = sdf.parse( s_date );
System.out.println( sdf.format( date ) );


Выкидывает:

java.text.ParseException: Unparseable date: " Ср, 16 12 2015 16:24:31 GMT"


Можно конечно обрезать первые пять символов и последние четыре. Но у меня будет много
разных форматов дат, и для каждой разный подход. Как сделать чтобы SimpleDateFormat.parse(),
парсил только то что указано?

Если в коде не видно, я в задании шаблона подставил 5 пробелов в начале и 4 в конце,
это не помогло.
    


Ответы

Ответ 1



Конкретно в вашем случае надо править форматную строку: // было: "dd MM yyyy hh:mm:ss" // модификации: EEE - день недели строкой, HH - час 0-23, zzz - временная зона SimpleDateFormat sdf = new SimpleDateFormat( " EEE, dd MM yyyy HH:mm:ss zzz", new Locale("ru", "RU") ); Date date = sdf.parse( s_date ); System.out.println( sdf.format( date ) ); //Вывод: Ср, 16 12 2015 19:24:31 MSK Новое API: DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern( "E, d M y H:m:s z", new Locale("ru", "RU") ); ZonedDateTime newDate = ZonedDateTime.parse( s_date.trim(), newFormatter ); System.out.println( newFormatter.format( newDate )); // Вывод: Ср, 16 12 2015 16:24:31 GMT

Ответ 2



Возможно, подойдёт использование регулярных выражений, выделяющих нужную часть даты из строки. String s_date = " Ср, 16 12 2015 16:24:31 GMT"; final Pattern pattern = Pattern.compile(".*(\\d{2}\\s\\d{2}\\s\\d{4}\\s\\d{2}:\\d{2}:\\d{2}).*"); final Matcher matcher = pattern.matcher(s_date); if (matcher.find()) { Date date = null; SimpleDateFormat sdf = new SimpleDateFormat("dd MM yyyy hh:mm:ss"); try { date = sdf.parse(matcher.group(1)); } catch (ParseException e) { e.printStackTrace(); } System.out.println(sdf.format(date)); } else { System.out.println("No match!"); } Если же всё совсем плохо и формат даты может быть непредсказуем, то хорошим выбором может стать natty.

Комментариев нет:

Отправить комментарий