我需要以下代码,以便在提供的日期字符串与给定格式100%不匹配时开始失败。
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
format.setLenient(false);
format.parse("09/10/20144");
由于某些原因,即使使用setLenient(false),此调用也会返回实际的09/10/20144日期。 我尝试将“new ParsePosition(0)”传递给解析调用但这根本没有用,因为日期仍然以09/10/20144的形式返回。我需要从确切的日期格式中的任何例外来努力失败。有没有好办法呢?
答案 0 :(得分:4)
您给SDF的字符串仅通知格式化程序有关输入部分的顺序和类型(每个字段的间隔信息量是有限的,因为他应用了一些计算使其“有意义”)。 / p>
要实现您想要的效果,您可以使用正则表达式进行初步检查。在你的情况下:
String input = "09/10/20144";
if (input == null || !input.matches("[01]\\d/[0123]\\d/[12]\\d{3}")) {
throw new IllegalArgumentException("Invalid value or format");
} else {
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
format.setLenient(false);
format.parse(input);
}
上述正则表达式检查:
有关Java中正则表达式的更多信息:http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
答案 1 :(得分:0)
这是实现这一目标的一种方法,虽然它有些奇怪:
public static Date parseDate(String input) {
final String format = "MM/dd/yyyy";
if (input.length != format.length) { //Check the length, helps to avoid the cases mentioned earlier.
throw new ParseException("Lengths do not match", 0);
}
SimpleDateFormat format = new SimpleDateFormat(format);
format.setLenient(false);
return format.parse(input);
}
(这就是我之前在评论中所说的)