一、校验年月日格式
对于年月日格式的日期,可以通过对输入的字符串使用正则表达式进行校验,确保格式正确。以下代码示例展示了如何使用正则表达式校验日期是否符合"yyyy-MM-dd"格式:
/**
* 判断日期字符串是否符合指定格式
*
* @param str 日期字符串
* @param pattern 日期格式,例如"yyyy-MM-dd"
* @return true:符合指定格式;false:不符合指定格式
*/
public static boolean isValidDate(String str, String pattern) {
if (str == null || pattern == null) {
return false;
}
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
Date date = sdf.parse(str);
// 校验输入的日期是否和原日期一致,防止输入的非法日期转换成合法日期
if (!str.equals(sdf.format(date))) {
return false;
}
} catch (ParseException e) {
return false;
}
return true;
}
二、校验闰年
在校验日期是否合法时,需要考虑到闰年的情况。根据闰年的定义,能被4整除但不能被100整除,或者能被400整除的年份为闰年。以下代码示例展示了如何校验一个年份是否为闰年:
/**
* 判断指定年份是否是闰年
*
* @param year 年份
* @return true:是闰年;false:不是闰年
*/
public static boolean isLeapYear(int year) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
return true;
} else {
return false;
}
}
三、校验月份
在校验日期是否合法时,需要校验月份的取值范围。对于月份,它必须大于等于1小于等于12。以下代码示例展示了如何校验一个整数是否为合法的月份:
/**
* 判断指定整数是否为合法的月份
*
* @param month 月份
* @return true:是合法的月份;false:不是合法的月份
*/
public static boolean isValidMonth(int month) {
if (month >= 1 && month <= 12) {
return true;
} else {
return false;
}
}
四、校验日
在校验日期是否合法时,需要校验日的取值范围。对于日,它必须大于等于1小于等于所在月份的天数,同时要考虑闰年的情况。以下代码示例展示了如何校验一个整数是否为合法的日:
/**
* 判断指定整数是否为合法的日
*
* @param year 年份
* @param month 月份
* @param day 日
* @return true:是合法的日;false:不是合法的日
*/
public static boolean isValidDay(int year, int month, int day) {
if (month == 2) {
if (isLeapYear(year)) {
if (day >= 1 && day <= 29) {
return true;
}
} else {
if (day >= 1 && day <= 28) {
return true;
}
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
if (day >= 1 && day <= 30) {
return true;
}
} else {
if (day >= 1 && day <= 31) {
return true;
}
}
return false;
}
五、总结
本文从校验年月日格式、校验闰年、校验月份、校验日等几个方面详细阐述了如何使用Java校验日期是否合法。通过以上方法可以有效地避免因输入非法日期引起的程序异常,提高程序的可靠性和稳定性。