Die Antwort von Assylias und die Antwort von JB Nizet sind beide richtig:
- Rufen Sie die neue Konvertierungsmethode auf, die der Legacy-Klasse hinzugefügt wurde
java.util.Date::toInstant
.
- Rufen Sie an
Instant::atZone
und übergeben Sie a ZoneId
, was zu a führt ZonedDateTime
.
Ihr Codebeispiel richtet sich jedoch an Quartale. Lesen Sie dazu weiter.
Viertel
Sie müssen Ihre Quartiere nicht selbst verwalten. Verwenden Sie eine bereits geschriebene und getestete Klasse.
org.threeten.extra.YearQuarter
Die java.time- Klassen werden durch das ThreeTen-Extra- Projekt erweitert. Unter den vielen praktischen Klassen, die in dieser Bibliothek angeboten werden, finden Sie Quarter
und YearQuarter
.
Holen Sie sich zuerst Ihre ZonedDateTime
.
ZonedId z = ZoneID.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = myJavaUtilDate.toInstant().atZone( z ) ;
Bestimmen Sie das Jahresquartal für dieses bestimmte Datum.
YearQuarter yq = YearQuarter.from( zdt ) ;
Als nächstes brauchen wir das Startdatum dieses Quartals.
LocalDate quarterStart = yq.atDay( 1 ) ;
Obwohl ich dies nicht unbedingt empfehle, können Sie eine einzelne Codezeile verwenden, anstatt eine Methode zu implementieren.
LocalDate quarterStart =
YearQuarter
.from(
myJavaUtilDate
.toInstant()
.atZone(
ZoneID.of( "Africa/Tunis" )
)
)
.atDay( 1 )
;
Übrigens, wenn Sie Ihre Nutzung java.util.Date
insgesamt auslaufen lassen können , tun Sie dies. Es ist eine schreckliche Klasse, zusammen mit seinen Geschwistern wie Calendar
. Verwenden Sie Date
nur dort, wo Sie müssen, wenn Sie mit altem Code arbeiten, der noch nicht auf java.time aktualisiert wurde .
Ü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
.
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu den Klassen java.time .
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 .