我知道parse()可用于了解有效日期是否符合特定格式。但是在失败的情况下抛出异常。我想验证日期是否是特定格式。特别是我需要这个比较的布尔结果。如何在Java中实现它?
答案 0 :(得分:2)
您需要解析字符串以确定它是否有效。你最好的选择可能是:
try {
parse();
return true;
} catch (ParseException ignore) {
return false;
}
答案 1 :(得分:2)
public static Scanner s;
public static void main(String[] args) {
System.out.println(checkDateFormat("2000-01-01"));
}
// Checks if the date meets the pattern and returns Boolean
// FORMAT yyyy-mm-dd RANGE : 2000-01-01 and 2099-12-31
public static Boolean checkDateFormat(String strDate) {
if (strDate.matches("^(19|20)\\d\\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$")) {
return true;
} else {
return false;
}
}
这里的解决方案使用Regex Patterns来验证日期格式(因为你没有使用SimpleDateFormat Parse()方法所以不需要任何例外,因为不需要任何例外)。有关正则表达式和日期的更多信息/帮助,请访问http://www.regular-expressions.info/dates.html。
答案 2 :(得分:2)
我想知道为什么没有人知道使用ParsePosition
进行标准验证。基于异常逻辑的编程或多或少是邪恶的。
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
sdf.setLenient(false);
ParsePosition pp = new ParsePosition(0);
java.util.Date d = sdf.parse("02/29/2015", pp);
if (d == null) {
System.out.println("Error occurred at position: " + pp.getErrorIndex());
return false;
} else {
return true; // valid
}
请注意,使用严格模式!
非常重要有点超出问题的范围但有趣:
新的java.time
- 库(JSR-310)does force the user to code against exceptions - 与' SimpleDateFormat`相比的明确回归。捕获异常的问题通常是糟糕的性能,如果您以较低的质量解析批量数据,则这可能是相关的。
答案 3 :(得分:1)
如果你想在java核心中实现这一点,那就是这样的。
private static final PARSER = new SimpleDateFormat(FORMAT);
boolean isParsable(String date){
try {
PARSER.parse(date);
} catch (Exception ex) {
return false;
}
return true;
}
答案 4 :(得分:1)
除非您想编写可以与日期格式匹配的正则表达式,否则除了捕获ParseException
之外别无他法。