用Java进行奇怪的日期解析

时间:2012-01-23 18:20:31

标签: 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) {
...

这里dateString是一个字符串,我正在尝试解析为日期。如果字符串不是有效日期,例如:552533 Jan 2012 1340001,我希望抛出一个错误。我做错了什么?

3 个答案:

答案 0 :(得分:4)

尝试此操作(在解析实际日期之前):

sdf.setLenient(false);

另见:

答案 1 :(得分:2)

SimpleDateFormat.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
}

答案 2 :(得分:0)

正如都铎提到的那样,SimpleDateFormat在解析失败时不会抛出异常。另一种选择是来自Apache Commons javadocsDateUtils.parseDate90here)。