tl; dr
java.time.temporal.ChronoUnit.DAYS.between(
earlier.toLocalDate(),
later.toLocalDate()
)
…oder…
java.time.temporal.ChronoUnit.HOURS.between(
earlier.truncatedTo( ChronoUnit.HOURS ) ,
later.truncatedTo( ChronoUnit.HOURS )
)
java.time
Zu Ihrer Information , das Joda-Time- Projekt befindet sich jetzt im Wartungsmodus. Das Team empfiehlt die Migration zu den Klassen java.time .
Das Äquivalent von Joda-Time DateTime
ist ZonedDateTime
.
ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZonedDateTime now = ZonedDateTime.now( z ) ;
Anscheinend möchten Sie die Tage nach Datum zählen, was bedeutet, dass Sie die Tageszeit ignorieren möchten. Wenn Sie beispielsweise eine Minute vor Mitternacht beginnen und eine Minute nach Mitternacht enden, sollte dies zu einem einzigen Tag führen. Extrahieren LocalDate
Sie für dieses Verhalten ein aus Ihrem ZonedDateTime
. Die LocalDate
Klasse repräsentiert einen Nur-Datum-Wert ohne Tageszeit und ohne Zeitzone.
LocalDate localDateStart = zdtStart.toLocalDate() ;
LocalDate localDateStop = zdtStop.toLocalDate() ;
Verwenden Sie die ChronoUnit
Aufzählung, um die verstrichenen Tage oder andere Einheiten zu berechnen.
long days = ChronoUnit.DAYS.between( localDateStart , localDateStop ) ;
Kürzen
Wenn Sie nach einer allgemeineren Methode für diese Zählung fragen, bei der Sie das Delta der Stunden als Stunde und nicht die vollständigen Stunden als Zeitspanne von 60 Minuten interessieren, verwenden Sie die truncatedTo
Methode.
Hier ist Ihr Beispiel von 14:45 bis 15:12 am selben Tag.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime start = ZonedDateTime.of( 2017 , 1 , 17 , 14 , 45 , 0 , 0 , z );
ZonedDateTime stop = ZonedDateTime.of( 2017 , 1 , 17 , 15 , 12 , 0 , 0 , z );
long hours = ChronoUnit.HOURS.between( start.truncatedTo( ChronoUnit.HOURS ) , stop.truncatedTo( ChronoUnit.HOURS ) );
1
Dies funktioniert seit Tagen nicht mehr. Verwenden Sie in diesem Fall toLocalDate ().
Ü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 Zeichenfolgen, 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 .
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 .
Days.daysBetween
sind, dass sie falsch sind?