2017-04-14 14 views
6

Ich versuche, Daten von zwei Objekten mit unterschiedlichen Typen zu vergleichen. Gibt es eine Möglichkeit, Calendar-Objekt in LocalDater oder umgekehrt umzuwandeln?Wie Objekte von LocalDate und Kalender-Klasse zu vergleichen?

Danke :)

public class ABC{ 

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

Versuchen Sie ihren Jahr zu vergleichen, Monat und Tag Werte? – VGR

+0

Wie wäre es mit einer Besetzung? Ich bin mir nicht sicher, ob es funktioniert, da sich der Kalender nicht von LocalDate und umgekehrt erstreckt. – HessianMad

+0

@HessianMad Cast funktioniert hier nicht. –

Antwort

2

Sie benötigen Daten, zu vergleichen, so ist genau das tun lassen.

Mit this answer als Referenz:

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

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

return calendarAsLocalDate.compareTo(localDate) 
+0

Sie sollten ZoneId.systemDefault() durch 'calendar.getTimeZone(). ToZoneId()' ersetzen, um sicherzustellen, dass die Konvertierung jedes Kalenderobjekt korrekt behandelt. – VGR

+0

@VGR Danke, ich habe es behoben. –

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

Sie können Vergleiche von int-Werten durchführen, indem Sie sie einfach subtrahieren. Zum Beispiel: 'int yearCompare = c1.get (Kalender.YEAR) - c2.getYear(); '. Dies funktioniert auch bei einem Integer-Überlauf aufgrund der Art der Zweierkomplementdarstellung. – VGR

Verwandte Themen