La méthode Date before renvoie false si les deux dates sont égales
Lorsque vous comparez deux dates avec date avant la méthode, si les dates sont similaires, il renvoie false comme suit:
- date1 le: Mar Déc 18 00:00:00 GMT+02:00 2012
- date2 le: Mar Déc 18 00:00:00 GMT+02:00 2012
La méthode {[0] } renvoie toujours false dans ce cas, ce qui n'a pas de sens pour moi (ne s'applique pas à mon cas en d'autres termes). je veux vérifier si une date (jour/mois/année) est égale à la date d'aujourd'hui (jour/mois/année) ?
7 réponses
, Comme date1.equals(date2)
, il est normal que date1.before(date2)
renvoie la valeur false. Comme le fera date1.after(date2)
.
Les deux dates sont les mêmes, donc l'une n'est pas avant l'autre.
From javadoc : true si et seulement si l'instant de temps représenté par cet objet Date est strictement antérieur à l'instant représenté par when; false sinon.
Essayez quelque chose comme :
if(date1.before(date2) || date1.equals(date2)) ...
Les réponses fournies ci-dessous suggèrent de tester l'inverse, et elles ont raison:
if(!date1.after(date2)) ...
Les deux tests sont équivalent.
Vous pouvez simplement tester l'inverse :
!date1.after(date2)
Vous pouvez toujours convertir une vérification de commande stricte en une vérification non stricte de cette manière. Depuis mathématiquement:
a > b ⇔ ¬ (a ≤ b)
Si les dates sont égales, alors évidemment l'une N'est pas avant l'Autre: false is the correct return for date1.before(date2) where date1 == date2
.
Si vous avez besoin deinclure égalité, pourquoi ne pas faire une négation sur .after()
(évidemment si la date 1 n'est pas après la date 2, alors c'estégal ou avant ), mais je m'assurerais que c'est en fait une logique correcte pour ce que vous essayez d'accomplir.
Si l'égalité est un cas particulier qui doit être traité différemment, alors ayez un test séparé pour .equals()
.
Vous pouvez utiliser l'inverse comme proposé par bowmore: !date1.after(date2)
Ou si vous recherchez des plages, between peut inclure les points de terminaison, auquel cas vous pouvez use return !d.before(min) && !d.after(max)
Vous pouvez également l'utiliser:
boolean check = dateOne.before(dateTwo) || DateUtils.isSameDay(dateOne, dateTwo);
DateUtils est de org.Apache.commun.lang.temps paquet
Le vrai problème avec votre code est peut-être que vous ne prenez pas en compte les millis et la fonction before fait
Deux objets java.util.Date avec un résultat toString: Dim août 28 00: 00: 00 CEST 2016 peut avoir une valeur différente lors de l'appel à getTime. Par exemple
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
Bien sûr, ces dates ne sont pas égales.
Depuis javadoc:
" retourne: true si et seulement si l'instant de temps représenté par cet objet Date est strictement instant représenté par when; false sinon."
C'est un comportement normal, car dateBefore
vérifie si une date est avant l'autre. Si les dates sont égales, cela est évident pour être faux.