如何在不使用Exception的情况下检查Date是否符合特定的DateFormat?

时间:2016-02-25 12:08:27

标签: java date simpledateformat

我知道parse()可用于了解有效日期是否符合特定格式。但是在失败的情况下抛出异常。我想验证日期是否是特定格式。特别是我需要这个比较的布尔结果。如何在Java中实现它?

5 个答案:

答案 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之外别无他法。