Calendar setLenient方法不允许检查year字段的完整性

时间:2016-09-22 15:19:15

标签: java

我使用此方法检查用户输入的日期是否有效:

  private boolean isThisDateValid(Date dateToValidate) {
    Calendar cal = Calendar.getInstance();
    if (dateToValidate == null) {
        return false;
    }

    cal.setLenient(false);
    cal.setTime(dateToValidate);
    try {
        cal.getTime();
    } catch (Exception e) {
        return false;
    }
    return true;
}

问题是,当用户写错了年份(大年)时,它不会抛出异常示例: 12/09/2016666

我应该以单独的方法检查年份字段的完整性。

1 个答案:

答案 0 :(得分:1)

即使距离现在还很远,2016666仍然是有效年份。从现在开始大约有200万年了,所以我可以看到为什么你可能不会在很多情况下想要它,但是对于日期验证器来说这不是一个合法的日期会很奇怪。这确实是一种不正确的行为。

如果你想进行额外的验证(例如确保年份字段不超过当前年份),你需要自己做,并抛出适当的例外。