java - 我如何在 Java 中验证日期(仅当前日期或之后)
问题描述
我需要为用户输入的日期添加输入验证。有一个 startDate 和 endDate。startDate 需要是当前日期或更晚的日期。endDate 需要在 startDate 之后等于 OR。
我使用的日期格式是 YYYY-MM-dd
已经验证日期是正确的日期
在请求类中,我们目前正在使用 javax.validation,如下所示:
@Pattern(regex = CommmonRegexp.DATE, message = "INVALID_FIELD")
我如何编辑它以适应我需要的约束?
我需要什么:验证两个日期的输入,确保 startDate 只接受当前日期或更晚,endDate 只接受晚于 startDate 的日期
解决方案
您应该使用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 的详细信息,并通过此博客获取示例。
推荐阅读
- flutter - 从 html 页面获取标题 - FLUTTER
- html - Vuetify v-img 不使用绝对路径加载图像
- swift - “隐式展开的属性”警告?
- c# - 如何仅获取文本框中输入的字符?
- html - ASP.NET MVC 和 VS2013 结合使用哪些技术来构建多平台响应式网页设计(RWD)
- spring-boot - Cloud Foundry css 文件返回 502 Bad Gateway: Registered endpoint failed to handle the request
- c++ - 在 macOS 上用 C++ 构建的未定义符号
- c# - C#.NET 中的模拟 - 无法通过 LogonType 4 或 5 模拟
- python - 优化python中的蛮力算法
- python - 在 Tkinter Python 中将文本放在变量后面