首页 > 解决方案 > 我如何在 Java 中验证日期(仅当前日期或之后)

问题描述

我需要为用户输入的日期添加输入验证。有一个 startDate 和 endDate。startDate 需要是当前日期或更晚的日期。endDate 需要在 startDate 之后等于 OR。

我使用的日期格式是 YYYY-MM-dd

已经验证日期是正确的日期

在请求类中,我们目前正在使用 javax.validation,如下所示:

@Pattern(regex = CommmonRegexp.DATE, message = "INVALID_FIELD")

我如何编辑它以适应我需要的约束?

我需要什么:验证两个日期的输入,确保 startDate 只接受当前日期或更晚,endDate 只接受晚于 startDate 的日期

标签: javaregexvalidationdatesimpledateformat

解决方案


您应该使用java.time在 java 中对日期进行操作。以下是根据您的需要验证日期的工作方法。您可以根据需要更改格式。您可以使用许多其他有用的方法。将此方法称为validateDates("2019-03-03","2019-04-03")

public static boolean validateDates(String start, String end) {
    try {
        DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        LocalDate startDate = LocalDate.parse(start, dateFormat);
        LocalDate endDate = LocalDate.parse(end, dateFormat);
        LocalDate current = LocalDate.now();
        return (startDate.isEqual(current) || startDate.isAfter(current)) && endDate.isAfter(startDate);
    }catch(DateTimeParseException ex) {
        ex.printStackTrace();
    }
    return false;
}

更新

您可以DateTimeFormatter根据需要使用预定义的或自定义的。您可以通过JavaDoc 详细了解 DateTimeFormatters 的详细信息,并通过此博客获取示例。

是一些关于如何使用带日期时间的区域 ID 的好读物。


推荐阅读