web-dev-qa-db-fra.com

Comment comparer les instances de LocalDate Java 8

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

49
azalut

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

69
royB
LocalDate ld ....;
LocalDateTime ldtime ...;

ld.isEqual(LocalDate.from(ldtime));
0
Stepi

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;
}
0
Chigozie D.