Java中的奇怪日期解析

Java中的奇怪日期解析,java,parsing,date,Java,Parsing,Date,我正在尝试进行日期验证。当用户输入类似于:2552533 Jan 2012 1340001的内容时,将解析为:Wed Sep 03 07:41:00 EDT 9000。这是我的密码: SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy kkmm"); ... Date test; try { test = sdf.parse(dateString); } catch (Exception e) { ... 这里的dateSt

我正在尝试进行日期验证。当用户输入类似于:2552533 Jan 2012 1340001的内容时,将解析为:Wed Sep 03 07:41:00 EDT 9000。这是我的密码:

SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy kkmm");
...
Date test;
try {
    test = sdf.parse(dateString);
} catch (Exception e) {
...
这里的
dateString
是我试图解析为日期的字符串。如果字符串不是有效日期,比如:552533 Jan 2012 1340001,我希望抛出一个错误。我做错了什么?

尝试一下(在分析实际日期之前):

另见:
在分析实际日期之前,尝试以下方法:

另见:

simpleDataFormat.parse
在出现错误时不会引发任何异常,它返回
null
。从javadoc:

 Returns:
     A Date parsed from the string. In case of error, returns null.  
 Throws:
     NullPointerException - if text or pos is null.
因此,您可以:

SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy kkmm");
...
Date test = sdf.parse(dateString);
if(test == null) {
   // there was an error
}

SimpleDataFormat.parse
在出现错误时不会引发任何异常,它返回
null
。从javadoc:

 Returns:
     A Date parsed from the string. In case of error, returns null.  
 Throws:
     NullPointerException - if text or pos is null.
因此,您可以:

SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy kkmm");
...
Date test = sdf.parse(dateString);
if(test == null) {
   // there was an error
}

正如Tudor提到的,
SimpleDataFormat
在解析失败时不会抛出异常。另一种选择是Apache Commons提供的
DateUtils.parseDate90
()。

正如Tudor提到的,
SimpleDataFormat
在解析失败时不会引发异常。另一种选择是ApacheCommons提供的
DateUtils.parseDate90
()。

下意识的回答:你试过Joda Time吗@如果有人不使用它,Freiheit-JodaTime总是值得发布的。这不仅仅是一种下意识的反应,如果它造成的区别像呼吸和溺水。下意识的反应:你试过Joda Time吗@如果有人不使用它,Freiheit-JodaTime总是值得发布的。这不仅仅是一个下意识的反应,如果它造成的区别像呼吸和溺水。我非常喜欢单线解决方案。谢谢你的帮助,现在一切正常。我非常喜欢单线解决方案。谢谢你的帮助,现在一切正常。