2013-03-03 91 views
1

我試圖執行此代碼:try塊一個ParseException異常被拋出的SimpleDateFormat ParseException的:無法解析的日期

Date date = null; 
if (detailsBean.getDiscoveryProjectBean().getCreatedDate()==null || 
    detailsBean.getDiscoveryProjectBean().getCreatedDate().equalsIgnoreCase("")) 
{ 
    projectDetails.getDiscoveryProject().setCreationTime(new Date()); 
} 
else 
{ 
    try 
    { 
     date = new SimpleDateFormat (FormatUtils.simpleFormat). 
      parse (detailsBean.getDiscoveryProjectBean().getCreatedDate()); 
    } catch (Exception e) { 
     throw new PanDaApplicationException (e.getMessage()); 
    } 
    projectDetails.getDiscoveryProject().setCreationTime(date); 
} 

。不過,我不知道代碼看起來不錯的原因。該FormatUtils.simpleFormat的定義是public static final String simpleFormat = "dd-MMM-yyyy"detailsBean.getDiscoveryProjectBean().getCreatedDate()有像28-Feb-2013

我真的沒有任何線索,爲什麼這個異常被拋出,我需要幫助的價值。

+1

值* * *「2013年2月28日」或*完全*表示?你的默認語言環境是什麼? – 2013-03-03 09:23:07

+0

我想你的默認本地不是英文,你必須將它改爲en – Mike 2013-03-03 09:25:04

+0

異常消息應該包含解析器解析失敗的日期字符串。你能向我們展示異常消息嗎? – 2013-03-03 09:25:28

回答

4

我的猜測是問題是SimpleDateFormat使用您的默認語言環境的方式 - 如果您的語言環境不使用「Feb」作爲縮寫月份名稱,則會出現問題。因此,如果您的所有數據實際上都是英文的,您可能需要:

DateFormat format = new SimpleDateFormat(FormatUtils.simpleFormat, Locale.US); 
format.setTimeZone(...); // See below 
date = format.parse(detailsBean.getDiscoveryProjectBean().getCreatedDate()); 

請注意有關設置時區的部分。如果您不指定其他任何內容,SimpleDateFormat將再次使用您的系統默認值。 (你會得到的瞬間「午夜在指定的時間段」爲Date值。)

我也強烈建議您考慮使用Joda Time,而不是內置Date/Calendar類型 - 這是一個很大更好的日期/時間API。

3
Locale.setDefault (Locale.ROOT); 
System.out.println (new SimpleDateFormat ("dd-MMM-yyyy").parse ("28-Feb-2013")); 
Locale.setDefault (Locale.forLanguageTag ("ru")); 
System.out.println (new SimpleDateFormat ("dd-MMM-yyyy").parse ("28-Feb-2013")); 

對我來說,輸出爲:

Thu Feb 28 00:00:00 MSK 2013 
Exception in thread "main" java.text.ParseException: Unparseable date: "28-Feb-2013" 
    at java.text.DateFormat.parse(DateFormat.java:357) 
    at DateFormat.main(DateFormat.java:19) 

所以同日成功地與ROOT區域分析,但與俄羅斯失敗。

+1

這通常是一個更好的主意(IMO),只需指定特定SimpleDateFormat的區域設置,而不是更改默認值。 – 2013-03-03 12:35:59

+0

@JonSkeet我剛纔演示了不恰當的默認語言環境會導致這種異常。因爲有幾種方法可以解決這個問題。 – 2013-03-03 16:25:56

+1

麻煩的是,當你只提到其中一種情況時,OP有理由推斷你認爲這是最好的方法。 – 2013-03-03 16:30:01

相關問題