我正在尝试执行此代码:
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);
}
在try块中抛出ParseException异常。我不知道原因,因为代码似乎很好。 FormatUtils.simpleFormat
的定义为public static final String simpleFormat = "dd-MMM-yyyy"
,detailsBean.getDiscoveryProjectBean().getCreatedDate()
的定义类似28-Feb-2013
我真的没有任何线索,为什么抛出这个异常,我需要帮助。
答案 0 :(得分: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。
答案 1 :(得分: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
语言环境成功解析了相同日期,但俄语失败了。