我有这个代码用于检查Date是否正常,但它并没有让所有情况都崩溃。例如,当text =“03/13/2009”,因为此日期不存在格式“dd / MM / yyyy”,它将日期解析为03/01/2010。当我尝试解析不正确的日期时,有没有办法改变这种行为并获得异常?什么是进行此验证的最佳方法?
public static final String DATE_PATTERN = "dd/MM/yyyy";
public static boolean isDate(String text){
SimpleDateFormat formatter = new SimpleDateFormat(DATE_PATTERN);
ParsePosition position = new ParsePosition(0);
formatter.parse(text, position);
if(position.getIndex() != text.length()){
return false;
}else{
return true;
}
}
感谢。
答案 0 :(得分:7)
在解析之前需要将lenient设置为false,否则解析器将“猜测”并尝试更正无效日期
formatter.setLenient(false);
查看http://java.sun.com/j2se/1.5.0/docs/api/java/util/Calendar.html#setLenient(boolean)
答案 1 :(得分:-3)
在我看来,验证日期的最佳方法是使用正则表达式,你可以在这里找到许多也用于验证日期http://regexlib.com/DisplayPatterns.aspx Java对正则表达式有很好的支持,这里有一些教程http://java.sun.com/docs/books/tutorial/essential/regex/index.html