验证在Java中如何比较日期、以前的日期和将来的日期?
在登记一个人之前,我需要确认出生日期不大于前一个日期,例如(1970年1月1日)和当前日期
不适合我的方法:
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"));
}
}
# 1 楼答案
以下行无效,不符合您的要求:
看起来您想检查
persona.getFechNac()
返回的值是否在1970年1月1日之后、当前日期之前或等于当前日期正确的方法是这样的:
我在这里假设
persona.getFechNac()
返回一个String
包含格式为dd/MM/yyyy
的日期# 2 楼答案
tl;博士
使用现代类,特别是
LocalDate
爪哇。时间
使用现代的java。仅限时间课程,从不
SimpleDateFormat
或Calendar
LocalDate
{a1}类表示只包含日期的值,不包含一天中的时间,也不包含{a2}或offset-from-UTC
解析
定义与输入字符串匹配的格式模式
当前日期
今天的约会
时区对确定日期至关重要。在任何一个特定的时刻,世界各地的日期因地区而异。例如,午夜过后几分钟在Paris France是新的一天,而在Montréal Québec仍然是“昨天”
如果未指定时区,JVM将隐式应用其当前默认时区。该默认值可能在运行时(!)期间change at any moment,所以你的结果可能会有所不同。最好明确地将[desired/expected time zone][2]指定为参数
以
continent/region
的格式指定一个proper time zone name,例如America/Montreal
、Africa/Casablanca
或Pacific/Auckland
。千万不要使用2-4个字母的缩写,例如EST
或IST
,因为它们不是真正的时区,没有标准化,甚至不是唯一的(!)如果您想使用JVM的当前默认时区,可以请求它并将其作为参数传递。如果省略,JVM的当前默认值将隐式应用。最好是显式的,因为JVM中任何应用程序的任何线程中的任何代码都可以在运行时期间随时更改默认值
比较
关于java。时间
java.time框架内置于Java8及更高版本中。这些类取代了麻烦的legacy日期时间类,比如^{} 、^{} 、&^{}
目前位于maintenance mode的Joda-Time项目建议迁移到java.time类
要了解更多信息,请参阅Oracle Tutorial。并在Stack Overflow中搜索许多示例和解释。规范是JSR 310
你可以交换java。时间对象直接与数据库连接。使用符合JDBC 4.2或更高版本的JDBC driver。不需要字符串,也不需要
java.sql.*
类在哪里可以获得java。时间课
{a31}项目扩展了java。有额外课程的时间。这个项目是java未来可能增加的一个试验场。时间你可以在这里找到一些有用的类,比如^{} 、^{} 、^{} 和more