当前位置:首页 > Java

如何校验日期java

2026-03-26 10:08:40Java

校验日期的 Java 方法

使用 SimpleDateFormatsetLenient 方法

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateValidator {
    public static boolean isValidDate(String dateStr, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        sdf.setLenient(false);
        try {
            Date date = sdf.parse(dateStr);
            return true;
        } catch (ParseException e) {
            return false;
        }
    }
}

调用示例:

如何校验日期java

boolean isValid = DateValidator.isValidDate("2023-02-30", "yyyy-MM-dd");
System.out.println(isValid); // 输出 false,因为 2 月没有 30 日

使用 Java 8 的 LocalDateDateTimeFormatter

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;
        }
    }
}

调用示例:

如何校验日期java

boolean isValid = DateValidator.isValidDate("2023-02-30", "yyyy-MM-dd");
System.out.println(isValid); // 输出 false

使用 Apache Commons Validator

如果项目中已引入 Apache Commons Validator,可以使用 DateValidator 类:

import org.apache.commons.validator.routines.DateValidator;

public class DateValidationExample {
    public static boolean isValidDate(String dateStr, String format) {
        DateValidator validator = DateValidator.getInstance();
        return validator.isValid(dateStr, format);
    }
}

自定义校验逻辑

对于更复杂的校验需求,可以结合正则表达式和逻辑判断:

import java.util.regex.Pattern;

public class DateValidator {
    public static boolean isValidDate(String dateStr) {
        Pattern pattern = Pattern.compile("^\\d{4}-\\d{2}-\\d{2}$");
        if (!pattern.matcher(dateStr).matches()) {
            return false;
        }
        String[] parts = dateStr.split("-");
        int year = Integer.parseInt(parts[0]);
        int month = Integer.parseInt(parts[1]);
        int day = Integer.parseInt(parts[2]);

        if (month < 1 || month > 12) {
            return false;
        }
        if (day < 1 || day > 31) {
            return false;
        }
        if (month == 4 || month == 6 || month == 9 || month == 11) {
            return day <= 30;
        }
        if (month == 2) {
            if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
                return day <= 29;
            } else {
                return day <= 28;
            }
        }
        return true;
    }
}

注意事项

  • 使用 SimpleDateFormat 时需注意线程安全问题,建议每次使用时创建新实例或使用 ThreadLocal
  • Java 8 的日期时间 API(如 LocalDate)是线程安全的,推荐在新项目中使用。
  • 自定义逻辑需考虑闰年、月份天数等边界情况。

标签: 日期java
分享给朋友:

相关文章

java如何创建文件

java如何创建文件

使用 File 类创建文件 通过 File 类的 createNewFile() 方法创建文件。此方法返回布尔值,表示文件是否成功创建。 import java.io.File; import ja…

java如何安装

java如何安装

安装Java的步骤 下载Java开发工具包(JDK) 访问Oracle官方网站或OpenJDK项目页面下载适合操作系统的JDK版本。Oracle JDK适用于商业用途,OpenJDK是开源版本。选择…

java如何自学

java如何自学

确定学习目标和路径 自学Java需要明确目标,例如开发Web应用、Android应用或后端服务。根据目标选择学习重点,如Java基础、Spring框架或Android开发。制定阶段性计划,从基础语法到…

java前景如何

java前景如何

Java 当前的市场需求 Java 在企业级开发、大数据、云计算等领域仍占据重要地位。许多大型企业(如银行、电商平台)依赖 Java 构建后端系统。招聘平台数据显示,Java 开发岗位数量稳定,尤其在…

java如何实现异步

java如何实现异步

Java实现异步的方法 Java中实现异步编程可以通过多种方式,每种方式适用于不同的场景和需求。以下是常见的实现方法: 使用Thread类 创建新线程执行异步任务是最基础的方式。通过继承Thread…

java如何遍历map

java如何遍历map

遍历Map的几种方法 在Java中,遍历Map有多种方式,可以根据需求选择合适的方法。以下是常见的几种遍历方式: 使用entrySet遍历 通过entrySet()方法获取键值对的集合,可以同时访问…