Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie konvertiere ich das Oracle-Datumsformat in Java?

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?