Die Berechnung der Differenz in den Daten in Java
Ich finde es lustig, dass Java (oder java.util library) verfügt nicht über eine integrierte Funktion zum berechnen der Differenz in den Daten. Ich möchte subtrahiert ein Datum von einem anderen zu bekommen, die verstrichene Zeit zwischen Ihnen. Was ist der beste Weg, dies zu tun?
Ich weiß der einfache Weg ist, um die Differenz der Zeit in Millisekunden konvertieren und dann in Tagen. Jedoch wollte ich wissen, ob dies funktioniert in allen Fällen (mit Sommerzeit, etc.).
- Siehe xmission.com/~goodhill/dates/deltaDates.html für einige Hintergrundinformationen.
- Das ist ein schöner Artikel. Danke!
- Suche StackOverflow für "joda" und Begriff wie "span", "Intervall", "Dauer", "Zeitraum". Finden Sie viele Beispiele, mit Diskussion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr Zeiten sind abgeleitet von der UTC-Termin, oder Sie sind einfach nur der Unterschied zwischen zwei Aufrufe von System.getCurrentTimeMillis() gemessen, auf dem gleichen system, erhalten Sie eine gültige Anzahl von Millisekunden, während der Unterschied, unabhängig von timezone-Probleme. (deshalb sollte alles mit UTC als storage-format-es ist viel einfacher, um zu gehen von UTC->lokale Zeit, wenn Sie versuchen, den anderen Weg gehen, dann müssen Sie zum speichern der örtlichen Zeitzone, zusammen mit der lokalen Zeit -- oder zu versuchen, zu folgern, es, gack!)
Als für das drehen dieses in eine Anzahl von Tagen, sollten Sie nur in der Lage sein, um Division durch 86400000 ein... mit der Einschränkung, dass es ist eine gelegentliche Schaltsekunde jedes andere Jahr oder so.
Java fehlt nicht viel, wenn man sich an open source: versuchen Joda-Time.
Entweder Joda-Time oder das neue java.time package in Java 8.
Beide frameworks verwenden Sie die Halb-Offene Ansatz, wo der Anfang ist inclusive, während das Ende exklusive. Manchmal notiert als
[)
. Dies ist in der Regel der beste Ansatz für die Definition von Zeitspannen.java.Zeit
Java.Zeit framework in Java 8 und später
Period
Klasse repräsentieren einen Zeitraum als eine Anzahl von Jahren, eine Reihe von Monaten, und eine Anzahl von Tagen. Aber diese Klasse ist beschränkt auf ganze Tage, keine Darstellung von Stunden, Minuten und Sekunden.Beachten Sie, dass wir eine Zeitzone angeben, entscheidend für die Bestimmung eines Datums. Zum Beispiel, ein neuer Tag dämmert früher in Paris als in Montréal.
Für ganze Tage, dann Daylight Saving Time (DST) ist irrelevant.
Wenn Sie möchten, eine Zählung der Gesamtzahl der Tage, verwenden Sie die
ChronoUnit
enum enthält einige Berechnungsmethoden. Beachten Sie die Berechnungen der Rendite eine lange.Ich habe gefragt über eine volle Periode in java.Zeit, einschließlich Stunden, Minuten, Sekunden. Nicht möglich, da Java 8. Eine überraschende Problemumgehung mithilfe der gebündelten Bibliotheken vorgeschlagen wurde von Meno Hochschild: Verwenden Sie ein
Dauer
- Klasse gefunden in der javax.xml.Datentyp-Paket.Joda-Time
Hier finden Sie einige Beispiel-code in Joda-Time 2.3.
Aufrufen
toString
erhalten Sie einen string in der form definiert durch die ISO 8601 standardPnYnMnDTnHnMnS
.Mit der date4j Bibliothek:
Es gibt einen einfachen Weg, um es zu implementieren. Wir können den Kalender.add-Methode mit der Schleife.
Zum Beispiel, wie unten,
Den minus-Tagen zwischen beginDate und endDate verwendet, und den code wie unten
Spaß Haben! @.@
Ich bin nicht einverstanden mit der Behauptung, dass Java nicht über einen Mechanismus für die Berechnung der Differenz zwischen Datumsangaben.
Java wurde konzipiert für den weltweiten Einsatz. Es wurde so konzipiert, dass es nicht ein Konzept von heute, es ist nur ein Konzept von "Zeit in Millisekunden". Jede interpretation eines solchen universellen Zeit als der Zeit-und-Datum in einem bestimmten Ort unter einer bestimmten Konvention ist lediglich eine Projektion oder eine Ansicht.
Die calendar-Klasse wird verwendet, um diese Art der absoluten Zeit in Datteln. Sie können auch hinzufügen oder subtrahieren Datum-Komponenten, wenn Sie wirklich brauchen, um. Der einzige Weg, um einen Unterschied in der Bezeichnung der Bauteile zwischen den beiden wäre mal Kalender erzeugt und spezifisch. So könnte man argumentieren, dass die standard-Bibliothek nicht enthalten ist eine smart genug Gregorianischen Kalender, und ich würde Zustimmen, dass es lässt einiges zu wünschen übrig.
Dass gesagt wird, es gibt zahlreiche Implementierungen für diese Art von Funktionalität, die ich sehen, haben andere Beispiele.
Java-Implementierung der Daten ist schlecht. Wenn Sie finden, Joda-Time zu kompliziert ist, versuchen, meinen kleinen Beitrag zu open source:
http://calendardate.sourceforge.net/javadoc/index.html