java - 你如何在 Java 中比较日期、上一个日期和未来日期?
问题描述
在注册一个人之前,我需要验证出生日期不大于以前的日期,例如(01/01/1970)和当前日期。
对我不起作用的方法:
public void agregarPersona() throws Exception {
ImplPersonaD dao;
try {
Date date = new Date();
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
String fechaActual = String.valueOf(dateFormat.format(date));
String fechaPasada = "01/01/1970";
if(fechaPasada > persona.getFechNac() <= fechaActual ){
dao = new ImplPersonaD();
dao.agregarPersona(persona);
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Satisfactorio", "Ingresado correctamente"));
}
else{
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Invalido", "Fecha invalida"));
}
} catch (Exception e) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error", "Hubo un problema"));
}
}
解决方案
以下行是无效的,不要做你认为他们应该做的事情:
String fechaActual= String.valueOf(Calendar.DATE/Calendar.MONTH/Calendar.YEAR);
String fechaPasada = "01/01/1970";
if(fechaPasada > persona.getFechNac() <= fechaActual ){
看起来您想要检查返回的值persona.getFechNac()
是否是 01/01/1970 之后且在当前日期之前或等于当前日期的日期。
正确的方法是这样的:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
// ...
LocalDate fechaActual = LocalDate.now();
LocalDate fechaPasada = LocalDate.of(1970, 1, 1);
LocalDate fechNac = LocalDate.parse(persona.getFechNac(),
DateTimeFormatter.ofPattern("dd/MM/yyyy"));
if (fechNac.isAfter(fechaPasada) && fechaActual.isBefore(fechNac)) {
// ...
}
我在这里假设persona.getFechNac()
返回一个String
包含格式的日期dd/MM/yyyy
。
推荐阅读
- php - 我的图标选择器按钮提交我的 HTML 表单
- android - CardView 海拔被背景取消了?
- javascript - 我想从猫鼬的数组中删除项目
- generics - 在 Rust 中,如何创建一个接受“标记组件”作为类型参数的函数?
- c++builder - BPL 中包类中编译器生成函数的链接器错误
- javascript - node.js 流管道分别覆盖文件夹中的所有文件
- python - 使用来自 USB 棒 ssl 的证书从 python 获取请求
- drake - 如何用浮动底座机器人做逆动力学?
- python - 如何处理flask异步http请求
- javascript - TypeError:e.preventDefault 不是 React Hook Form 上使用 EmailJs 的函数