Comment comparer les instances LocalDate Java 8


J'écris une application qui doit être assez précise dans les dates et je me demande comment puis-je comparer les instances LocalDate.. pour l'instant, j'utilisais quelque chose comme:

LocalDate localdate1 = LocalDate().now();
LocalDate localdate2 = someService.getSomeDate();
localdate1.equals(localdate2);

Mais j'ai remarqué que mon application me donne des résultats déroutants, et je pense que c'est à cause de la comparaison de date.

Je pense à obtenir le temps de 1970' à long et comparer ces deux, mais je dois être plus facile, j'en suis sûr

Author: Honza Zidek, 2015-03-23

2 answers

À l'Aide de equals() {[2] } remplace equals:

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 heureux avec le résultat de equals(), vous êtes bon en utilisant 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 sortie

 55
Author: royB, 2015-03-23 07:39:45

Je crois que cet extrait sera également utile dans une situation où la comparaison des dates couvre 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
Author: Chigozie D., 2018-06-13 19:52:43