tl;dr
Nee, dat doe je niet.
- Databases zoals Oracle slaan datum-tijd-waarden op met hun eigen intern gedefinieerde binaire waarden, niet als platte tekst.
- Oracle
DATE
type bevat zowel een tijd van de dag als een datum.
DATE
=datum + tijd van de dag
De DATE
type in Oracle-database heeft een verkeerde naam. Het bevat meer dan een datum (jaar, maand en dag van de maand).
Dit type vertegenwoordigt een datum waarbij de tijd van de dag wordt omgezet in hele seconden. Dit type mist de context van een tijdzone of offset-van-UTC. Dit type kan dus niet worden gebruikt om een moment, een specifiek punt op de tijdlijn weer te geven. (Om een moment bij te houden, gebruikt u Oracle-type TIMESTAMP WITH TIME ZONE
.)
Merk op dat deze Oracle-naamgeving verschilt van de SQL-standaard. In de standaard, een DATE
type is een waarde voor alleen de datum, zonder tijd van de dag en zonder tijdzone of offset.
java.time.LocalDateTime
Dus dit type verwijst naar LocalDateTime
op Java.
Ophalen.
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
Opslag.
myPreparedStatement.setObject( … , ldt ) ;
Tekst
Merk op dat we in de bovenstaande code slimme objecten gebruiken in plaats van domme strings.
Datum-tijd-objecten zoals LocalDateTime
zijn niet String
en houd geen tekst vast. Ze vertegenwoordigen intern hun waarde op hun eigen manier. U kunt een tekenreeks ontleden als een datum-tijd-object en u kunt het datum-tijd-object vragen om tekst te genereren. Maar de tekst en het datum-tijd-object zijn gescheiden en onderscheiden.
De java.time klassen gebruiken standaard ISO 8601 formaten bij het ontleden/genereren van strings.
String output = ldt.toString() ;
Parseren.
U kunt tekst in andere formaten genereren. U kunt uw eigen aangepaste indeling opgeven door DateTimeFormatter.ofPattern
. aan te roepen . Meestal beter om automatisch te formatteren door DateTimeFormatter.ofLocalized…
. aan te roepen methoden.
Dit is al vele malen behandeld op Stack Overflow. Dus zoek voor meer informatie.
LocalDateTime ldt = LocalDateTime.parse( "2020-01-23T01:23:45.123456789" ) ;
Over java.time
De java.time
framework is ingebouwd in Java 8 en hoger. Deze klassen vervangen de lastige oude legacy
date-time klassen zoals java.util.Date
, Calendar
, &SimpleDateFormat
.
Zie voor meer informatie de Oracle-zelfstudie . En zoek Stack Overflow voor veel voorbeelden en uitleg. Specificatie is JSR 310 .
De Joda-Time project, nu in onderhoudsmodus , adviseert migratie naar de java.time lessen.
Je mag java.time ruilen objecten rechtstreeks met uw database. Gebruik een JDBC-stuurprogramma
voldoet aan JDBC 4.2
of later. Geen strings nodig, geen java.sql.*
klassen. Hibernate 5 &JPA 2.2 ondersteunen java.time .
Waar zijn de java.time-klassen te verkrijgen?
- Java SE 8
, Java SE 9
, Java SE 10
, Java SE 11
, en later - Onderdeel van de standaard Java API met een gebundelde implementatie.
- Java 9 voegt enkele kleine functies en oplossingen toe.
- Java SE 6
en Java SE 7
- De meeste java.time functionaliteit is teruggezet naar Java 6 &7 in ThreeTen-Backport .
- Android
- Latere versies van Android-bundelimplementaties van de java.time lessen.
- Voor eerdere Android (<26), de ThreeTenABP project past ThreeTen-Backport aan (hierboven vermeld). Zie Hoe ThreeTenABP te gebruiken… .