2017-04-14 1 views
6

J'essaie de comparer les dates de deux objets ayant des types différents. Est-il possible de convertir l'objet Calendar en LocalDater ou vice-versa?Comment comparer les objets de classe LocalDate et Calendar?

Merci :)

public class ABC{ 

    public static void main(String args[]){ 
     Calendar c1= Calendar.getInstance(); 
     LocalDate c2= LocalDate.now();  
     System.out.println(c1.compareTo(c2)); 
    } 
} 
+0

Avez-vous essayez de comparer leur année, mois et jour des valeurs? – VGR

+0

Que diriez-vous de faire un casting? Je ne suis pas sûr que cela fonctionnera, puisque le calendrier ne s'étend pas de LocalDate et viceversa. – HessianMad

+0

@HessianMad Cast ne fonctionne pas ici. –

Répondre

2

Vous devez comparer les dates , donc nous allons le faire.

En utilisant this answer comme référence:

Calendar calendar = Calendar.getInstance(); 
LocalDate localDate = LocalDate.now(); 

LocalDate calendarAsLocalDate = calendar.toInstant() 
    .atZone(calendar.getTimeZone().toZoneId()) 
    .toLocalDate(); 

return calendarAsLocalDate.compareTo(localDate) 
+0

Vous devez remplacer ZoneId.systemDefault() par 'calendar.getTimeZone(). ToZoneId()', pour garantir que la conversion gère correctement chaque objet Calendar. – VGR

+0

@VGR Merci, je l'ai réparé. –

1
private int compare(Calendar c1, LocalDate c2) { 
     int yearCompare = ((Integer) c1.get(Calendar.YEAR)).compareTo(c2.getYear()); 
     if (yearCompare == 0) 
      return ((Integer) c1.get(Calendar.DAY_OF_YEAR)).compareTo(c2.getDayOfYear()); 
     else 
      return yearCompare; 
    } 
+0

Vous pouvez faire des comparaisons de valeurs int en les soustrayant simplement. Par exemple, 'int yearCompare = c1.get (Calendar.YEAR) - c2.getYear();'. Cela fonctionne même en cas de débordement d'entier, en raison de la nature de la représentation à deux-complément. – VGR