UPDATE Das Joda-Time Projekt jetzt in maintenance mode berät Migration in die java.time Klassen. Siehe the Answer von Anees A für die Verwendung der ChronoUnit
und anderer java.time-Klassen.
Joda-Time
Die alten java.util.Date/.Calendar Klassen notorisch sind lästig und sollte vermieden werden.
Verwenden Sie stattdessen die Bibliothek Joda-Time. Sofern Sie keine Java 8-Technologie haben, verwenden Sie in diesem Fall den integrierten java.time-Framework (nicht in Android ab 2015).
Da Sie sich nur für "Tage" interessieren, die als Daten definiert sind (nicht 24-Stunden-Perioden), konzentrieren wir uns auf Daten. Joda-Time bietet die Klasse LocalDate
, um einen Nur-Datum-Wert ohne Uhrzeit oder Zeitzone darzustellen.
Wenn keine Zeitzone vorhanden ist, beachten Sie, dass die Zeitzone entscheidend bei der Bestimmung eines Datums wie "heute" ist. Ein neuer Tag dämmert früher nach Osten als nach Westen. Das Datum ist also nicht überall auf der Welt gleich, das Datum hängt von Ihrer Zeitzone ab.
DateTimeZone zone = DateTimeZone.forID ("America/Montreal");
LocalDate today = LocalDate.now (zone);
Lassen Sie uns die Anzahl der Tage bis nächste Woche zählen, die natürlich sieben sein sollten.
LocalDate weekLater = today.plusWeeks (1);
int elapsed = Days.daysBetween (today , weekLater).getDays();
Die getDays
am Ende extrahiert eine ebene int
Nummer von dem Objekt durch Days
daysBetween
zurückgegeben.
Dump zur Konsole.
System.out.println ("today: " + today + " to weekLater: " + weekLater + " is days: " + days);
heute: 2015.12.22 bis weekLater: 2015.12.29 ist Tage: 7
Sie haben Kalender Objekte. Wir müssen sie in Joda-Time-Objekte umwandeln. Intern haben die Kalenderobjekte eine long
Ganzzahl, die die Anzahl der Millisekunden seit der Epoche des ersten Moments von 1970 in UTC verfolgt. Wir können diese Nummer extrahieren und sie Joda-Time zuführen. Wir müssen auch die gewünschte Zeitzone angeben, mit der wir ein Datum bestimmen wollen.
long startMillis = myStartCalendar.getTimeInMillis();
DateTime startDateTime = new DateTime(startMillis , zone);
long stopMillis = myStopCalendar.getTimeInMillis();
DateTime stopDateTime = new DateTime(stopMillis , zone);
Konvertieren von DateTime-Objekten in LocalDate.
LocalDate start = startDateTime.toLocalDate();
LocalDate stop = stopDateTime.toLocalDate();
Jetzt machen Sie die gleiche verstrichene Berechnung, die wir vorher gesehen haben.
int elapsed = Days.daysBetween (start , stop).getDays();
Fragen wie das ist, warum sie joda Zeit schrieb. Java-Kalender ist so hoffnungslos ... Müssen Sie es verwenden? – iluxa
Ursache, wenn Sie müssen, würde ich beide zu Millis konvertieren und mit diesen arbeiten, ehrlich gesagt :-) – iluxa