我想将一个字符串转换为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
答案 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点是时候买一块新手表了。