1

可能重复:
如何在 Java 中健全地检查日期

我想将 String 转换为 Date.. 条件是接受的 String 格式应该只有 this 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具有 format dd/MM/yyyy-hh:mm:ss,这是无效的,它应该通过异常,但它不会引发任何期望。

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

4

4 回答 4

7

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

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

formatter.setLenient(false);格式化程序实例化后尝试上线。这将强制格式化程序仅使用您指定的格式。

于 2012-09-26T06:17:19.180 回答
2
  formatter.setLenient(false);

将为您提供所需的例外

来自javadocs:

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

于 2012-09-26T06:22:13.280 回答
0

Javadoc

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

尝试

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

这将引发 ParseException。

于 2012-09-26T06:18:00.257 回答
0

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

于 2012-09-26T06:20:40.640 回答