Comment comparer les instances de LocalDate Java 8

j'écris une application qui doit être assez précise dans les dates et je me demande comment je peux comparer des 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 confus, et je pense que c'est à cause de la date de comparaison.

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

40
demandé sur Honza Zidek 2015-03-23 02:24:43

2 réponses

en utilisant equals() LocalDate remplacer est é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 êtes bon en utilisant les méthodes prédéfinies LocalDate.

notez que toutes ces méthodes utilisent le compareTo0() méthode et juste vérifier le cmp valeur. si vous êtes toujours obtenir bizarre résultat (qui ne convient pas), merci de joindre un exemple d'entrée et de sortie

55
répondu 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
répondu Chigozie D. 2018-06-13 19:52:43