tl; dr
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate ld =
givenJavaUtilDate.toInstant()
.atZone( z )
.toLocalDate();
LocalDate today = LocalDate.now( z );
LocalDate kwanzaaStart = today.withMonth( Month.DECEMBER ).withDayOfMonth( 26 );
LocalDate kwanzaaStop = kwanzaaStart.plusWeeks( 1 );
Boolean isDateInKwanzaaThisYear = (
( ! today.isBefore( kwanzaaStart ) )
&&
today.isBefore( kwanzaaStop )
)
Halb offen
Bei der Datums- und Uhrzeitarbeit wird üblicherweise der "Half-Open" -Ansatz verwendet, um eine Zeitspanne zu definieren. Der Anfang ist inklusive, während das Ende exklusiv ist . Eine Woche, die an einem Montag beginnt, läuft also bis zum folgenden Montag, schließt dies jedoch nicht ein.
java.time
Java 8 und höher wird mit dem integrierten java.time
Framework geliefert. Unterstützt die alten lästigen Klassen einschließlich java.util.Date/.Calendar
und SimpleDateFormat
. Inspiriert von der erfolgreichen Joda-Time-Bibliothek. Definiert durch JSR 310. Erweitert durch das ThreeTen-Extra-Projekt.
Ein Instant
Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden.
Instant
Konvertieren Sie Ihre java.util.Date
Objekte in Sofortobjekte.
Instant start = myJUDateStart.toInstant();
Instant stop = …
Wenn Sie java.sql.Timestamp
Objekte über JDBC aus einer Datenbank abrufen , konvertieren Sie sie auf ähnliche Weise in java.time.Instant . A java.sql.Timestamp
ist bereits in UTC, sodass Sie sich keine Gedanken über Zeitzonen machen müssen.
Instant start = mySqlTimestamp.toInstant() ;
Instant stop = …
Holen Sie sich den aktuellen Moment zum Vergleich.
Instant now = Instant.now();
Vergleichen Sie mit den Methoden isBefore, isAfter und equals.
Boolean containsNow = ( ! now.isBefore( start ) ) && ( now.isBefore( stop ) ) ;
LocalDate
Vielleicht möchten Sie nur mit dem Datum arbeiten, nicht mit der Tageszeit.
Die LocalDate
Klasse repräsentiert einen Nur-Datum-Wert ohne Tageszeit und ohne Zeitzone.
LocalDate start = LocalDate.of( 2016 , 1 , 1 ) ;
LocalDate stop = LocalDate.of( 2016 , 1 , 23 ) ;
Geben Sie eine Zeitzone an, um das aktuelle Datum abzurufen. Das heutige Datum variiert zu jedem Zeitpunkt je nach Zeitzone. Zum Beispiel bricht in Paris früher ein neuer Tag an als in Montréal.
LocalDate today = LocalDate.now( ZoneId.of( "America/Montreal" ) );
Wir können die Verwendung isEqual
, isBefore
und isAfter
Methoden zu vergleichen. In der Datums- und Zeitarbeit verwenden wir üblicherweise den Half-Open-Ansatz, bei dem der Beginn einer Zeitspanne inklusive und das Ende exklusiv ist .
Boolean containsToday = ( ! today.isBefore( start ) ) && ( today.isBefore( stop ) ) ;
Interval
Wenn Sie die ThreeTen-Extra- Bibliothek zu Ihrem Projekt hinzufügen möchten , können Sie mit der Interval
Klasse eine Zeitspanne definieren. Diese Klasse bietet Methoden zum Testen, ob das Intervall andere Datums- / Zeitangaben / Intervalle enthält , aneinander grenzt, einschließt oder überlappt .
Die Interval
Klasse arbeitet an Instant
Objekten. Die Instant
Klasse repräsentiert einen Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Stellen eines Dezimalbruchs).
Wir können den LocalDate
Moment auf einen bestimmten Moment einstellen , den ersten Moment des Tages, indem wir eine Zeitzone angeben, um einen zu erhalten ZonedDateTime
. Von dort können wir durch Extrahieren von a zu UTC zurückkehren Instant
.
ZoneId z = ZoneId.of( "America/Montreal" );
Interval interval =
Interval.of(
start.atStartOfDay( z ).toInstant() ,
stop.atStartOfDay( z ).toInstant() );
Instant now = Instant.now();
Boolean containsNow = interval.contains( now );
Ü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 java.time
Klassen.
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Wo bekomme ich die java.time
Klassen?
Das ThreeTen-Extra- Projekt wird java.time
um zusätzliche Klassen erweitert. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen java.time
. Sie können einige nützliche Klassen hier wie finden Interval
, YearWeek
, YearQuarter
, und mehr .