rango - obtener fecha actual java
La fecha anterior al método devuelve false si ambas fechas son iguales (7)
Como date1.equals(date2)
, es normal que date1.before(date2)
devuelva false. Como lo hará date1.after(date2)
.
Ambas fechas son iguales, así que una no está antes de la otra.
Desde javadoc : verdadero si y solo si el instante de tiempo representado por este objeto Fecha es estrictamente anterior al instante representado por cuando; falso de lo contrario.
Intenta algo como:
if(date1.before(date2) || date1.equals(date2)) ...
Las respuestas proporcionadas a continuación sugieren pruebas para el inverso, y tienen razón:
if(!date1.after(date2)) ...
Ambas pruebas son equivalentes.
al comparar dos fechas con fecha anterior al método, si las fechas son similares, devuelve falso de la siguiente manera:
- fecha 1: martes 18 de diciembre, 00:00:00 GMT + 02: 00 2012
- fecha2: martes 18 de diciembre, 00:00:00 GMT + 02: 00 2012
el método date1.before(date2)
siempre devuelve false en este caso, lo que no tiene sentido para mí (no se aplica a mi caso en otras palabras). ¿Quiero verificar si una fecha (día / mes / año) es igual a la fecha de hoy (día / mes / año)?
El problema real con su código tal vez es que no está tomando en cuenta los milis y la función anterior sí lo hace.
Dos objetos java.util.Date con un resultado de toString: Sun Aug 28 00:00:00 CEST 2016 puede tener un valor diferente al llamar a getTime. Por ejemplo
Date d1;
Date d2;
d1.toString(); // = Sun Aug 28 00:00:00 CEST 2016
d2.toString(); // = Sun Aug 28 00:00:00 CEST 2016
d1.getTime(); // = 1472335200605
d2.getTime(); // = 1472335200000
Por supuesto, estas fechas no son iguales.
De javadoc:
"Devuelve: verdadero si y solo si el instante de tiempo representado por este objeto Fecha es estrictamente anterior al instante representado por cuando; falso de lo contrario".
Este es un comportamiento bastante normal porque dateBefore
comprueba si una fecha es anterior a la otra. Si las fechas son iguales, es obvio que es falso.
Puedes usar esto también:
boolean check = dateOne.before(dateTwo) || DateUtils.isSameDay(dateOne, dateTwo);
DateUtils es del paquete org.apache.commons.lang.time
Si las fechas son iguales, entonces obviamente una no es anterior a la otra: false is the correct return for date1.before(date2) where date1 == date2
.
Si necesita incluir la igualdad, ¿por qué no hacer una negación en .after()
(obviamente, si la fecha 1 NO es posterior a la fecha 2, entonces es igual o anterior ), pero me aseguraría de que esta sea la lógica correcta para lo que usted dice? están tratando de lograr
Si la igualdad es un caso especial que debe manejarse de manera diferente, entonces .equals()
una prueba separada para .equals()
.
Simplemente puedes probar el inverso:
!date1.after(date2)
Siempre se puede convertir una verificación de orden estricta a una verificación no estricta de esta manera. Desde matemáticamente:
a > b ⇔ ¬ (a ≤ b)
puede usar el inverso como lo propuso bowmore !date1.after(date2)
O si está buscando rangos, puede incluir los puntos finales, en cuyo caso podría use return !d.before(min) && !d.after(max)