如何在Java中验证日期(仅当前日期或之后)

时间:2019-04-05 20:05:34

标签: java regex validation date simpledateformat

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

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

已经验证该日期为正确的日期

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

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

我该如何修改它以适应所需的约束?

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

2 个答案:

答案 0 :(得分:3)

您应该使用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。您可以通过this JavaDoc来详细了解DateTimeFormatters,并可以通过this blog来获取示例。

Thisthis是一些有关如何在日期时间中使用区域ID的好书。

答案 1 :(得分:0)

您可能应该使用类似Java 8的LocalDate类而不是正则表达式。它有很多帮助方法可以帮助您完成所需的工作:

https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html