Ich füge zur richtigen Antwort von Ole VV hinzu
JDBC 4.2
Insbesondere - ich werde hauptsächlich mit JDBC arbeiten.
JDBC 4.2 hat Unterstützung für den Austausch von java.time- Objekten mit der Datenbank hinzugefügt . Siehe die PreparedStatement::setObject
und ResultSet::getObject
Methoden.
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
LocalDate today = LocalDate.now( z ) ;
myPreparedStatement.setObject( … , today ) ;
Abruf.
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
Aus Gründen , die mir zu entkommen, die JDBC - Spezifikation ist nicht erforderlich Unterstützung für die beiden am häufigsten verwendeten Klassen: Instant
und ZonedDateTime
. Ihre Datenbank und Ihr JDBC-Treiber unterstützen diese möglicherweise nicht.
Wenn nicht, können Sie leicht konvertieren. Beginnen Sie mit der OffsetDateTime
in JDBC erforderlichen Unterstützung.
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
Um diesen Moment durch die Wanduhrzeit zu sehen, die von Personen einer bestimmten Region (einer Zeitzone) verwendet wird, wenden Sie a ZoneId
an, um ein ZonedDateTime
Objekt zu erhalten.
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = odt.atZoneSameInstant() ;
Um sich auf UTC einzustellen, extrahieren Sie eine Instant
. An Instant
ist per Definition immer in UTC.
Instant instant = odt.toInstant() ;
Sie können auch umgekehrt konvertieren, um in eine Datenbank zu schreiben.
myPreparedStatement.setObject( … , zdt.toOffsetDateTime() ;
…und:
myPreparedStatement.setObject( … , instant.atOffset( ZoneOffset.UTC ) ) ;
Beachten Sie die Namenskonvention in verwendet java.time : at
, from
, to
, with
, und so weiter.
Ü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 .
good old java.util.Date
- Es ist alt, aber nicht gut. Neuer Code sollte eine neue API verwenden.