我需要为用户输入的日期添加输入验证。有一个startDate和endDate。 startDate必须为当前日期或更高日期。 endDate必须等于startDate之后的OR。
我使用的日期格式为YYYY-MM-dd
已经验证该日期为正确的日期
在请求类中,我们目前正在使用javax.validation,如下所示:
@Pattern(regex = CommmonRegexp.DATE, message = "INVALID_FIELD")
我该如何修改它以适应所需的约束?
我需要什么:验证两个日期的输入,确保startDate仅接受当前日期或更晚,并且endDate仅接受比startDate晚的日期
答案 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来获取示例。
答案 1 :(得分:0)
您可能应该使用类似Java 8的LocalDate类而不是正则表达式。它有很多帮助方法可以帮助您完成所需的工作:
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html