JAVA中的日期格式错误无效

时间:2012-09-26 06:09:10

标签: java

  

可能重复:
  How to sanity check a date in java

我想将一个字符串转换为Date ...,条件是接受字符串格式应该只有yyyy/MM/dd-HH:MM:SS

以任何其他格式提供的日期应该给出错误。

try {
    String str_date = "25/09/2012-13:43:20";
    DateFormat formatter;
    Date date;
    formatter = new SimpleDateFormat("yyyy/MM/dd-hh:mm:ss");
    date = (Date) formatter.parse(str_date);
    System.out.println("Today is " + date);
} catch (ParseException e) {
    System.out.println("Exception :" + e);
}

由于str_date的格式为dd/MM/yyyy-hh:mm:ss,这是无效的,它应该通过例外,但它不会抛出任何预期。

输出为Today is Mon Mar 05 13:43:20 IST 31

4 个答案:

答案 0 :(得分:7)

我只是快速浏览一下您正在使用的解析方法的Java文档,它说:

  

默认情况下,解析是宽松的:如果输入不是此对象的格式方法使用的形式,但仍可以解析为日期,则解析成功。客户可以通过调用setLenient(false)坚持严格遵守格式。

在格式化实例化后,尝试将formatter.setLenient(false);放在行上。这将迫使格式化程序仅使用您指定的格式。

答案 1 :(得分:2)

  formatter.setLenient(false);

应为您提供所需的例外

Froum javadocs:

默认情况下,解析是宽松的:如果输入不是使用的形式  通过这个对象的格式方法,但仍然可以解析为日期  解析成功了。客户可能会坚持严格遵守  通过调用setLenient(false)格式化。

答案 2 :(得分:0)

来自Javadoc

ParseException - if the *beginning* of the specified string cannot be parsed.

尝试

String str_date="25:09/2012-13:43:20";

这将抛出ParseException。

答案 3 :(得分:0)

您的格式应指定HH而不是hh。否则,13点是时候买一块新手表了。