2013-07-11 4 views
1

Это струнный я извлечения информации из использования регулярных выражений:Java Строка Дата неразборчивым даты

2823893a2f91c7507831f140dd7aa75e420477b0 - #0023922: Fixed the message for defaulted bonds ; Thu Oct 25 12:08:25 2012 +0000

Это код, который я использую для извлечения строки, а затем попытаться сделать это в Дату :

Pattern pattern3 = Pattern.compile(";\\s(.*)"); 
Matcher matcher3 = pattern3.matcher(s); 
matcher3.find(); 
String t = matcher3.group(1).toString(); 
     try { 
     Date time = new SimpleDateFormat("dd/MMM/yy hh:mm a").parse(t); 
     } catch (ParseException e) { 
       e.printStackTrace(); 
     } 

Это должно быть формат моего ввода:

Thu Oct 25 12:08:25 2012 +0000 

И то, что я хочу, чтобы сделать дату из Вышеупомянутая строка, которая выглядит следующим образом:

25/Oct/12 12:08 PM 

Но я получаю эти ошибки:

java.text.ParseException: Unparseable date: "Thu Oct 25 12:08:25 2012 +0000" 
Fixed the message for defaulted bonds0null 
    at java.text.DateFormat.parse(DateFormat.java:337) 
    at GitItem.cultivateGitItem(GitItem.java:42) 
    at main.main(main.java:9) 
java.text.ParseException: Unparseable date: "Thu Oct 25 11:52:39 2012 +0000" 
    at java.text.DateFormat.parse(DateFormat.java:337) 
    at GitItem.cultivateGitItem(GitItem.java:42) 
    at main.main(main.java:9) 
+0

Это похоже на какой-то вывод из VCS ... Если 'git', почему бы не использовать jgit? – fge

ответ

1

я бы просто удалить ненужную часть:

String dateAsString = s.replaceAll(".*;\\s+",""); 

Тогда вам нужно DateFormat: один для разбора строки и еще один, чтобы вывести правильный формат:

String s = "2823893a2f91c7507831f140dd7aa75e420477b0 - #0023922: Fixed the message for defaulted bonds ; Thu Oct 25 12:08:25 2012 +0000"; 
System.out.println("s = " + s); 
String dateAsString = s.replaceAll(".*;\\s+",""); 
System.out.println("dateAsString = " + dateAsString); 
DateFormat parser = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy X", Locale.ENGLISH); 
Date date = parser.parse(dateAsString); 
System.out.println("date = " + date); 
DateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy hh:mm a", Locale.ENGLISH); 
formatter.setTimeZone(TimeZone.getTimeZone("UTC")); 
System.out.println(formatter.format(date)); 

выходы:

s = 2823893a2f91c7507831f140dd7aa75e420477b0 - #0023922: Fixed the message for defaulted bonds ; Thu Oct 25 12:08:25 2012 +0000 
dateAsString = Thu Oct 25 12:08:25 2012 +0000 
date = Thu Oct 25 14:08:25 CEST 2012 
25/Oct/2012 12:08 PM 

Примечание: вам необходимо использовать соответствующий язык для разбора и печати имен месяц/день

+0

Это сообщение об ошибке: 'DateFormat parser = new SimpleDateFormat (« EEE MMM dd HH: mm: ss yyyy X », Locale.getDefault()); ' Это ошибка: ' Исключение в потоке "основного" java.lang.IllegalArgumentException: Нелегальная паттерн символ 'X' \t на java.text.SimpleDateFormat.compile (SimpleDateFormat.java:768) \t на Java .text.SimpleDateFormat.initialize (SimpleDateFormat.java:575) \t по адресу java.text.SimpleDateFormat. (SimpleDateFormat.java:500) \t в GitItem.cultivateGitItem (GitItem.java:44) \t в main.main (main.java:9) ' Извините за плохое форматирование. – Schadenfreude

+0

@Schadenfreude 'X' доступен в Java 7+. Если вы используете более раннюю версию, вы получите это исключение. – assylias

+0

Однако он должен работать с 'Z' вместо' X': '" EEE MMM dd HH: mm: ss yyyy Z "'. – assylias

2

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

SimpleDataFormat не может прочитать ваш разум, шаблон, который вы ему даете, не соответствует формату, который вы передаете в .parse().

"dd/MMM/yy hh:mm a" никогда не будет соответствовать Thu Oct 25 12:08:25 2012 +0000, вы должны указать точный шаблон, в котором находятся входящие данные, это очень хорошо документировано в JavaDocs.

Затем вы можете изменить шаблон на то, что хотите, используя .applyPattern(), чтобы позвонить в .format(), чтобы получить отформатированный результат, который вы хотите.

Смежные вопросы