tl;dr
Nein, tust du nicht.
- Datenbanken wie Oracle speichern Datums- und Uhrzeitwerte mit ihren eigenen intern definierten Binärwerten, nicht als Klartext.
- Oracle
DATE
Typ enthält sowohl eine Uhrzeit als auch ein Datum.
DATE
=Datum + Uhrzeit
Das DATE
Der Typ in der Oracle-Datenbank ist falsch benannt. Es enthält mehr als ein Datum (Jahr, Monat und Tag des Monats).
Dieser Typ stellt ein Datum dar, dessen Tageszeit auf ganze Sekunden aufgelöst wird. Diesem Typ fehlt der Kontext einer Zeitzone oder eines Offsets von UTC. Dieser Typ kann also nicht verwendet werden, um einen Moment, einen bestimmten Punkt auf der Zeitachse darzustellen. (Um einen Moment zu verfolgen, verwenden Sie den Oracle-Typ TIMESTAMP WITH TIME ZONE
.)
Beachten Sie, dass diese Oracle-Benennung vom SQL-Standard abweicht. Im Standard ein DATE
type ist ein Nur-Datum-Wert ohne Uhrzeit und ohne Zeitzone oder Offset.
java.time.LocalDateTime
Dieser Typ wird also LocalDateTime
auf Java.
Abruf.
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
Speicher.
myPreparedStatement.setObject( … , ldt ) ;
Text
Beachten Sie, dass wir im obigen Code intelligente Objekte anstelle von dummen Zeichenfolgen verwenden.
Datums- und Uhrzeitobjekte wie LocalDateTime
sind nicht String
und halten keinen Text. Sie repräsentieren ihren Wert intern auf ihre Weise. Sie können einen String als Datum-Uhrzeit-Objekt parsen und das Datum-Uhrzeit-Objekt auffordern, Text zu generieren. Aber der Text und das Datum-Uhrzeit-Objekt sind getrennt und unterschiedlich.
Die java.time Klassen verwenden den Standard ISO 8601 Formate beim Parsen/Generieren von Strings.
String output = ldt.toString() ;
Parsing.
Sie können Text in anderen Formaten generieren. Sie können Ihr eigenes benutzerdefiniertes Format angeben, indem Sie DateTimeFormatter.ofPattern
aufrufen . Normalerweise ist es besser, automatisch zu formatieren, indem Sie DateTimeFormatter.ofLocalized…
aufrufen Methoden.
Dies wurde bereits viele Male auf Stack Overflow behandelt. Suchen Sie also, um mehr zu erfahren.
LocalDateTime ldt = LocalDateTime.parse( "2020-01-23T01:23:45.123456789" ) ;
Über java.time
Der java.time
Framework ist in Java 8 und höher integriert. Diese Klassen ersetzen das lästige alte Legacy
Datumszeitklassen wie java.util.Date
, Calendar
, &SimpleDateFormat
.
Weitere Informationen finden Sie im Oracle-Tutorial . Und durchsuchen Sie Stack Overflow nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Die Joda-Time Projekt, jetzt im Wartungsmodus , empfiehlt die Migration zu java.time Klassen.
Sie können java.time austauschen Objekte direkt mit Ihrer Datenbank. Verwenden Sie einen JDBC-Treiber
kompatibel mit JDBC 4.2
oder später. Keine Notwendigkeit für Strings, keine Notwendigkeit für java.sql.*
Klassen. Hibernate 5 und JPA 2.2 unterstützen java.time .
Wo erhalte ich die java.time-Klassen?
- Java SE 8
, Java SE 9
, Java SE 10
, Java SE 11
, und höher – Teil der Standard-Java-API mit einer gebündelten Implementierung.
- Java 9 fügt einige kleinere Funktionen und Korrekturen hinzu.
- Java SE 6
und Java SE 7
- Die meiste Zeit java.time Die Funktionalität wird in ThreeTen-Backport auf Java 6 &7 zurückportiert .
- Android
- Spätere Versionen von Android-Bundle-Implementierungen von java.time Klassen.
- Für früheres Android (<26), ThreeTenABP Projekt adaptiert ThreeTen-Backport (oben erwähnt). Siehe How to use ThreeTenABP… .