2013-03-03 77 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

相关问题