java如何校验日期
校验日期的常见方法
在Java中校验日期可以通过多种方式实现,以下列举几种常用方法:
使用SimpleDateFormat类
SimpleDateFormat可以解析和格式化日期,通过设置严格模式(setLenient(false))可以校验日期是否合法。
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class DateValidator {
public static boolean isValidDate(String dateStr, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
sdf.setLenient(false);
try {
sdf.parse(dateStr);
return true;
} catch (ParseException e) {
return false;
}
}
public static void main(String[] args) {
String date = "2023-02-30";
String format = "yyyy-MM-dd";
System.out.println(isValidDate(date, format)); // 输出 false
}
}
使用DateTimeFormatter(Java 8及以上)
Java 8引入的java.time包提供了更现代的日期时间处理方式,DateTimeFormatter可以用于校验日期。
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
public class DateValidator {
public static boolean isValidDate(String dateStr, String format) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
try {
LocalDate.parse(dateStr, formatter);
return true;
} catch (DateTimeParseException e) {
return false;
}
}
public static void main(String[] args) {
String date = "2023-02-30";
String format = "yyyy-MM-dd";
System.out.println(isValidDate(date, format)); // 输出 false
}
}
使用正则表达式
对于简单的日期格式校验,可以使用正则表达式匹配。
import java.util.regex.Pattern;
public class DateValidator {
public static boolean isValidDate(String dateStr) {
String regex = "^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$";
return Pattern.matches(regex, dateStr);
}
public static void main(String[] args) {
String date = "2023-02-30";
System.out.println(isValidDate(date)); // 输出 true(仅格式校验,不校验日期是否真实存在)
}
}
使用Apache Commons Validator
如果项目中已经引入了Apache Commons Validator库,可以使用其提供的日期校验工具。

import org.apache.commons.validator.GenericValidator;
public class DateValidator {
public static void main(String[] args) {
String date = "2023-02-30";
System.out.println(GenericValidator.isDate(date, "yyyy-MM-dd", true)); // 输出 false
}
}
注意事项
- 使用
SimpleDateFormat时需注意线程安全问题,建议每次使用时创建新实例。 DateTimeFormatter是线程安全的,适合在高并发环境中使用。- 正则表达式仅校验格式,无法确保日期的真实性(如
2023-02-30格式正确但日期不存在)。






