tl; dr
Für Stunden, Minuten, Sekunden:
Duration.between( zdtA , zdtB )
Seit Jahren, Monaten, Tagen:
Period.between(
zdtA.toLocalDate() ,
zdtB.toLocalDate()
)
Einzelheiten
Die Antwort von Michal S ist richtig und zeigt ChronoUnit
.
Duration
& Period
Eine andere Route ist die Duration
und Period
Klassen. Verwenden Sie die erste für kürzere Zeiträume (Stunden, Minuten, Sekunden), die zweite für längere Zeit (Jahre, Monate, Tage).
Duration d = Duration.between( zdtA , zdtB );
Erstellen Sie durch Aufrufen einen String im Standardformat ISO 8601toString
. Das Format ist , PnYnMnDTnHnMnS
wo die P
markiert den Beginn und T
trennt die beiden Teile.
String output = d.toString();
Rufen Sie in Java 9 und höher die to…Part
Methoden auf, um die einzelnen Komponenten abzurufen. In einer anderen Antwort von mir besprochen .
Beispielcode
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdtStart = ZonedDateTime.now( z );
ZonedDateTime zdtStop = zdtStart.plusHours( 3 ).plusMinutes( 7 );
Duration d = Duration.between( zdtStart , zdtStop );
2016-12-11T03: 07: 50.639-05: 00 [Amerika / Montreal] /2016-12-11T06:14:50.639-05:00 [Amerika / Montreal]
PT3H7M
Siehe Live-Code in IdeOne.com .
Interval
& LocalDateRange
Das ThreeTen-Extra- Projekt erweitert die java.time-Klassen um Funktionen. Eine seiner praktischen Klassen besteht Interval
darin, eine Zeitspanne als ein Paar von Punkten auf der Zeitachse darzustellen. Ein anderer ist LocalDateRange
für ein Paar von LocalDate
Objekten. Im Gegensatz dazu stellen die Period
& Duration
Klassen jeweils eine Zeitspanne dar, die nicht an die Zeitachse angehängt ist.
Die Factory-Methode für Interval
nimmt ein Objektpaar Instant
.
Interval interval = Interval.of( zdtStart.toInstant() , zdtStop.toInstant() );
Sie können eine Duration
von einem erhalten Interval
.
Duration d = interval.toDuration();
Über java.time
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie java.util.Date
, Calendar
, & SimpleDateFormat
.
Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Sie können java.time- Objekte direkt mit Ihrer Datenbank austauschen . Verwenden Sie einen JDBC-Treiber, der mit JDBC 4.2 oder höher kompatibel ist . Keine Notwendigkeit für Strings, keine Notwendigkeit für java.sql.*
Klassen.
Woher bekomme ich die java.time-Klassen?
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden Interval
, YearWeek
, YearQuarter
, und mehr .