#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.
Комментариев нет:
Отправить комментарий