sql >> Databasteknik >  >> RDS >> Oracle

Hur konverterar man Oracle Date-format till Java?

tl;dr

Nej, det gör du inte.

  • Databaser som Oracle lagrar datum-tid-värden med sina egna internt definierade binära värden, inte som vanlig text.
  • Oracle DATE typ innehåller både en tid på dagen och ett datum.

DATE =datum + tid på dagen

DATE typ i Oracle-databasen är felnamn. Den rymmer mer än ett datum (år, månad och dag i månaden).

Den här typen representerar ett datum med tid på dagen som uppgår till hela sekunder. Denna typ saknar sammanhanget för en tidszon eller offset-från-UTC. Så den här typen kan inte användas för att representera ett ögonblick, en specifik punkt på tidslinjen. (För att spåra ett ögonblick, använd Oracle typ TIMESTAMP WITH TIME ZONE .)

Observera att denna Oracle-namngivning skiljer sig från SQL-standarden. I standarden, en DATE typ är ett värde endast för datum, utan tid på dagen och ingen tidszon eller förskjutning.

java.time.LocalDateTime

Så den här typen mappas till LocalDateTime i Java.

Hämtning.

LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;

Lagring.

myPreparedStatement.setObject( … , ldt ) ;

Text

Lägg märke till att i koden ovan använder vi smarta objekt snarare än dumma strängar.

Datum-tid-objekt som LocalDateTime är inte String och håll inte text. De representerar internt sitt värde på sitt eget sätt. Du kan analysera en sträng som ett datum-tid-objekt, och du kan be datum-tid-objektet att generera text. Men texten och datum-tid-objektet är separata och distinkta.

java.time klasser använder standard ISO 8601 format vid analys/generering av strängar.

String output = ldt.toString() ;

Parsing.

Du kan skapa text i andra format. Du kan ange ditt eget anpassade format genom att anropa DateTimeFormatter.ofPattern . Vanligtvis bättre att formatera automatiskt genom att anropa DateTimeFormatter.ofLocalized... metoder.

Detta har redan behandlats många många gånger på Stack Overflow. Så sök för att lära dig mer.

LocalDateTime ldt = LocalDateTime.parse( "2020-01-23T01:23:45.123456789" ) ;

Om java.time

java.time ramverket är inbyggt i Java 8 och senare. Dessa klasser ersätter det besvärliga gamla arvet datum-tid-klasser som java.util.Date , Kalender , &SimpleDateFormat .

Om du vill veta mer, se Oracle Tutorial . Och sök på Stack Overflow för många exempel och förklaringar. Specifikationen är JSR 310 .

Joda-Time projekt, nu i underhållsläge , rekommenderar migrering till java.time klasser.

Du kan byta ut java.time objekt direkt med din databas. Använd en JDBC-drivrutin kompatibel med JDBC 4.2 eller senare. Inget behov av strängar, inget behov av java.sql.* klasser. Hibernate 5 och JPA 2.2 stöder java.time .

Var får man tag i java.time-klasserna?



  1. Operatörer för att extrahera JSON-delkomponenter

  2. Nummer eller tecken för primärnyckelkolumn

  3. Hur kopierar man data från Excel till Oracle?

  4. Hur man konverterar MySQL JSON-array till kommaseparerad sträng