2013-07-11 43 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分析器=新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 at 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()以獲得所需的格式化輸出。