Frage

Ich mag einfache Datumsberechnungen in Java tun. Zum Beispiel berechnet die Differenz in Tagen zwischen dem zu Terminen (eine 0 Zeitkomponente). Natürlich könnte man durch die Anzahl der Millisekunden pro Tag eine einfache Subtraktion von Millisekunden geteilt tun, die gut funktioniert - bis Sommerzeiten die Szene betreten. Ich bin mir bewusst, dass unterschiedliche Interpretationen der „Differenz in Tagen“ möglich, in particuliar, ob man die Zeitkomponente oder nicht berücksichtigen sollte. Nehmen wir an, wir eine 0 Zeitkomponente der Einfachheit halber haben.

Diese Art der Berechnung scheint ein sehr häufiges Bedürfnis zu sein, und ich würde es schön zu haben, der eine Diskussion über verschiedene Ansätze auf die Frage finden.

War es hilfreich?

Lösung

Ich hätte einen Blick auf die Joda Datum / Zeit-Bibliothek, insbesondere der ReadableInterval Klasse.

Joda macht das Leben viel einfacher, wenn Daten / Zeiten in Java zu manipulieren, und ich glaube, es ist die Grundlage für den neuen Java JSR 310 wRT. Datum / Uhrzeit. das heißt, sie (oder etwas sehr ähnliche) wird in einer zukünftigen Version von Java vorhanden sein.

Andere Tipps

Es sieht aus wie Datum, Kalender und DateUtils werden alles tun, Sie suchen. http://commons.apache.org/ lang / api / org / apache / commons / lang / Zeit / DateUtils.html

DateUtils ermöglicht Kürzen oder die Zeit, Runden, so dass Sie nur mit nur den Terminen umgehen können. Sie erwähnt auch die Sommerzeit. Das Hauptproblem ist, wenn jemand sagt, dass sie etwas um 01:30 Uhr an einem Tag tun, wo es DST-Änderung war ... was 01.30 war es? Die erste oder die zweite? Glücklicherweise kann dies durch die Kalender-Klasse behandelt werden, da sie die Zeitzone speichern und DST-Offset. Für die Besonderheiten auf alles, check this out: http://www.xmission.com/~goodhill/dates/deltaDates.html

Die einfachere Möglichkeit ist, die Tage, Wochen, Monate und Jahre Klassen in Joda zu verwenden.

Auf diese Weise können Sie etwas so einfach machen wie:

int daysDifference = Days.daysBetween(startInstant, endInstant).getDays();

ist hier ein Artikel die Verwendung der Datum / Kalender Einrichtungen in Java diskutiert verstrichene Zeit zu berechnen.

Mit java.time

Der moderne Ansatz ist mit den java.time Klassen, die lästigen alten Legacy-Datum-Zeit-Klassen verdrängend.

  

berechnet die Differenz in Tagen zwischen zu Terminen (eine 0 Zeitkomponente)

Die LocalDate Klasse stellt ein Datum-only-Wert ohne Time-of-Tag und ohne Zeitzone.

Die ChronoUnit Enum hat einige praktische Methoden wie between .

In Zeiträume definieren, wobei die java.time Klassen verwenden, den halboffene Ansatz, bei dem der Anfang inklusive , während das Ende ist exklusiv .

LocalDate start = LocalDate.of( 2017 , Month.JANUARY , 23 );
LocalDate stop = LocalDate.of( 2017 , Month.FEBRUARY , 17 );
long daysBetween = ChronoUnit.DAYS.between( start , stop );

Sie diese Zeitspanne als Objekt darstellen können, mit der Period Klasse.

Period p = Period.between( start , stop );

Über java.time

Die java.time Rahmen in Java 8 und später gebaut. Diese Klassen verdrängen die störenden alten Vermächtnis Datum Zeitklassen rel="nofollow wie java.util.Date , Calendar & SimpleDateFormat .

Das Joda-Time Projekt nun in Wartungsmodus , rät Migration auf die java.time Klassen.

Um mehr zu erfahren, finden Sie in der Oracle Tutorial . Und Stack-Überlauf suchen viele Beispiele und Erklärungen. Spezifikation JSR 310 .

Wo die java.time Klassen erhalten?

Das ThreeTen-Extra Projekt erstreckt java.time mit zusätzlichen Klassen. Dieses Projekt ist eine Bewährungsprobe für eine mögliche zukünftige Ergänzungen java.time. Sie können einige nützliche Klassen hier wie Interval YearWeek , YearQuarter und mehr .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top