我正在尝试验证给定的日期,但它没有按照我想要的方式工作。用户输入一个日期,它被解析并传递到一个数组,我试图验证该日期是一个正确的日期(考虑到闰年、二月等),而不会使代码变得非常冗长。
Calendar calendar = new GregorianCalendar(getValidYear(), getValidMonth() - 1, getValidDay());
if( validYear < 2010 )
{
throw new InvalidDateException("Year must be greater than 2009");
} else {
if(validMonth < 1 || validMonth > 12 )
{
throw new InvalidDateException("Month value must be greater than or equal to 1 or less than or eqaul to 12");
} else {
if(validDay > calendar.getActualMaximum(Calendar.DAY_OF_MONTH) || validDay <= 0)
{
throw new InvalidDateException(String.format ("Day value must be greater than 0 and less than or equal to %s ",
calendar.getActualMaximum(Calendar.DAY_OF_MONTH) ) );
}
}//end nested if month
}//end nested IF year
}
如果我输入 2018/02/33 并将其打印出来,它会显示日期为 2018 年 3 月 5 日,但我不确定这些数字来自哪里。解析日期的代码是
String dateGiven[] = validDate.split("/");
validYear = Integer.parseInt(dateGiven[0]);
validMonth = Integer.parseInt( dateGiven[1] );
validDay = Integer.parseInt( dateGiven[2] );
当我构建字符串来显示它正确打印的日期时,但它不适用于日历,我不确定我做错了什么。如有任何帮助,我们将不胜感激!
最佳答案
使用 Java 8 时间功能会更容易:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
LocalDate date = LocalDate.parse("2018/02/33", formatter);
当日期无效时,将导致 DateTimeException
:
java.time.DateTimeException: Invalid value for DayOfMonth (valid values 1 - 28/31): 33
关于Java日历如何验证日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49225273/