Ich weiß, dass es auf SO viele Fragen gibt, wie man es bekommt, aber ich möchte ein Beispiel für die Verwendung der neuen Java 8 Date-API. Ich kenne auch die JodaTime-Bibliothek, möchte aber ohne externe Bibliotheken arbeiten.
Die Funktion muss sich mit folgenden Einschränkungen beschweren:
- Verhindern Sie Fehler beim Speichern des Datums
- Eingabe sind zwei Datumsobjekte (ohne Zeit kenne ich die Ortszeit, aber ich muss mit Datumsinstanzen tun)
DAYS.between(localDate1, localDate2)
.Antworten:
Wenn Sie logische Kalendertage wünschen , verwenden Sie die
DAYS.between()
Methode vonjava.time.temporal.ChronoUnit
:Wenn Sie buchstäbliche 24-Stunden-Tage (eine Dauer ) möchten , können Sie
Duration
stattdessen die Klasse verwenden:Weitere Informationen finden Sie in diesem Dokument .
quelle
Duration.between(today.atTime(0, 0), yesterday.atTime(0, 0)).toDays()
.today.atTime(0, 0)
dir kanntoday.atStartOfDay()
.ChronoUnit.DAYS.between(firstDate, secondDate)
Basierend auf den Kommentaren von VGR können Sie Folgendes verwenden:
quelle
Sie können verwenden
until()
:quelle
until
ist, dass es ein Period- Objekt zurückgibt . Das gibt eine Anzahl von Jahren / Monaten / Tagen zwischen den beiden Daten zurück, nicht die tatsächliche Anzahl von Tagen. Und getDays () für den Zeitraum gibt nur den Tagesteil zurück (ohne Berücksichtigung der Anzahl der Jahre oder Monate) und nicht die Gesamtzahl der Tage. Die zweite Version funktioniert genau wie gewünscht, um eine Anzahl von Tagen zwischen zwei Daten zu erhalten.Sie können
DAYS.between
von verwendenjava.time.temporal.ChronoUnit
z.B
quelle
Wir können die Between () -Methode aus ChronoUnit enum verwenden:
ChronoUnit.DAYS zählen Tage, die 24 Stunden abgeschlossen haben .
quelle
Verwenden Sie die TAGE in enum java.time.temporal.ChronoUnit . Unten ist der Beispielcode:
Ausgabe: * Anzahl der Tage zwischen dem Startdatum: 2015-03-01 und dem Enddatum: 2016-03-03 ist ==> 368. ** Anzahl der Tage zwischen dem Startdatum: 2016-03-03 und dem Enddatum: 2015-03-01 ist ==> -368 *
quelle
Jeder sagt, ChronoUnit.DAYS.between zu verwenden, aber das delegiert nur an eine andere Methode, die Sie selbst nennen könnten. So könnten Sie auch tun
firstDate.until(secondDate, ChronoUnit.DAYS)
.Die Dokumente für beide erwähnen tatsächlich beide Ansätze und sagen, dass sie den besser lesbaren verwenden sollen.
quelle
Bitte schön:
quelle
Holen Sie sich die Anzahl der Tage vor Weihnachten vom aktuellen Tag, versuchen Sie dies
quelle
Wenn das Ziel nur darin besteht, den Unterschied in Tagen zu ermitteln und da in den obigen Antworten über Delegiertenmethoden erwähnt wird, möchte darauf hingewiesen werden, dass einmal auch einfach verwendet werden kann -
quelle
quelle
Ich weiß, dass diese Frage für Java 8 gilt, aber mit Java 9 können Sie Folgendes verwenden:
quelle
Verwenden Sie die Klasse oder Methode, die Ihren Anforderungen am besten entspricht:
Eine Dauer misst eine Zeitspanne anhand zeitbasierter Werte (Sekunden, Nanosekunden).
Ein Zeitraum verwendet datumsbasierte Werte (Jahre, Monate, Tage).
Die ChronoUnit.between-Methode ist nützlich, wenn Sie eine Zeitspanne nur in einer einzigen Zeiteinheit messen möchten, z. B. Tage oder Sekunden.
https://docs.oracle.com/javase/tutorial/datetime/iso/period.html
quelle