J'écris une application dont les dates doivent être assez précises et je me demande comment comparer les instances de LocalDate. Pour l'instant, j'utilisais quelque chose du genre:
LocalDate localdate1 = LocalDate().now();
LocalDate localdate2 = someService.getSomeDate();
localdate1.equals(localdate2);
Mais j'ai remarqué que mon application me donnait des résultats confus, et je pense que c'est à cause de la comparaison des dates.
Je songe à obtenir le temps à partir de 1970 et à les comparer, mais je dois être plus facile, j'en suis sûr
Utiliser equals()
LocalDate
ne remplace par égal:
int compareTo0(LocalDate otherDate) {
int cmp = (year - otherDate.year);
if (cmp == 0) {
cmp = (month - otherDate.month);
if (cmp == 0) {
cmp = (day - otherDate.day);
}
}
return cmp;
}
Si vous n'êtes pas satisfait du résultat de equals()
, vous pouvez utiliser les méthodes prédéfinies de LocalDate
.
Notez que toutes ces méthodes utilisent la méthode compareTo0()
et vérifiez simplement la valeur cmp
. si vous obtenez toujours un résultat étrange (ce que vous ne devriez pas), veuillez joindre un exemple d'entrée et de sortie
LocalDate ld ....;
LocalDateTime ldtime ...;
ld.isEqual(LocalDate.from(ldtime));
Je crois que cet extrait de code sera également utile dans une situation où la comparaison de dates s'étend sur plus de deux entrées.
static final int COMPARE_EARLIEST = 0;
static final int COMPARE_MOST_RECENT = 1;
public LocalDate getTargetDate(List<LocalDate> datesList, int comparatorType) {
LocalDate refDate = null;
switch(comparatorType)
{
case COMPARE_EARLIEST:
//returns the most earliest of the date entries
refDate = (LocalDate) datesList.stream().min(Comparator.comparing(item ->
item.toDateTimeAtCurrentTime())).get();
break;
case COMPARE_MOST_RECENT:
//returns the most recent of the date entries
refDate = (LocalDate) datesList.stream().max(Comparator.comparing(item ->
item.toDateTimeAtCurrentTime())).get();
break;
}
return refDate;
}