Java日历如何验证日期
我正在尝试验证给定的日期,但它无法按我希望的方式工作。用户输入一个日期,它被解析并传递给一个数组,我试图验证该日期是否正确(考虑闰年、二月等),而不会使代码变得非常冗长Java日历如何验证日期,java,Java,我正在尝试验证给定的日期,但它无法按我希望的方式工作。用户输入一个日期,它被解析并传递给一个数组,我试图验证该日期是否正确(考虑闰年、二月等),而不会使代码变得非常冗长 Calendar calendar = new GregorianCalendar(getValidYear(), getValidMonth() - 1, getValidDay()); if( validYear < 2010 ) { throw new InvalidDateExc
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
}
当我构建字符串来显示它正确打印的日期时,它不能与日历一起工作,我不确定我做错了什么。感谢您的帮助 使用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 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
默认情况下,
日历
是宽松的。引用其方法的文件:
在宽大的解释下,诸如“1996年2月942日”之类的日期将被删除
被视为相当于2月1日后的第941天,
1996在严格(不宽容)的解释下,此类日期将导致抛出异常。默认为宽松
如果希望在日历上设置无效日期时收到异常,请使用setLenient(false)代码>
否则2018/02/33将被解释为2月1日后32天,即3月5日。日历默认为宽松。引用其方法的文件:
在宽大的解释下,诸如“1996年2月942日”之类的日期将被删除
被视为相当于2月1日后的第941天,
1996在严格(不宽容)的解释下,此类日期将导致抛出异常。默认为宽松
如果希望在日历上设置无效日期时收到异常,请使用setLenient(false)代码>
否则2018/02/33将被解释为2月1日之后的32天,也就是3月5日。不要使用日历
,使用java.time
。仅供参考,诸如和java.text.SimpleDateFormat等麻烦的旧日期时间类现在被内置在java 8和java 9中的类所取代。请参阅。不要使用日历
,使用java.time
。仅供参考,像、java.text.simpleDataFormat等麻烦的旧日期时间类现在被内置于java 8和java 9中的类所取代。看见