一、校验年月日格式
对于年月日格式的日期,可以通过对输入的字符串使用正则表达式进行校验,确保格式正确。以下代码示例展示了如何使用正则表达式校验日期是否符合"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校验日期是否合法。通过以上方法可以有效地避免因输入非法日期引起的程序异常,提高程序的可靠性和稳定性。