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?
- Java SE 8
, Java SE 9
, Java SE 10
, Java SE 11
, och senare - En del av standard Java API med en medföljande implementering.
- Java 9 lägger till några mindre funktioner och korrigeringar.
- Java SE 6
och Java SE 7
- Det mesta av java.time Funktionaliteten är backporterad till Java 6 &7 i ThreeTen-Backport .
- Android
- Senare versioner av Android-paketimplementeringar av java.time klasser.
- För tidigare Android (<26), ThreeTenABP projektet anpassar ThreeTen-Backport (nämnts ovan). Se Hur du använder ThreeTenABP... .