tl;dr
Nej, det gør du ikke.
- Databaser som f.eks. Oracle gemmer dato-tidsværdier med deres egne internt definerede binære værdier, ikke som almindelig tekst.
- Oracle
DATE
type indeholder både et tidspunkt på dagen og en dato.
DATE
=dato + tidspunkt på dagen
DATE
type i Oracle-databasen er forkert navngivet. Den indeholder mere end en dato (år, måned og dag i måneden).
Denne type repræsenterer en dato, hvor klokkeslættet opløses til hele sekunder. Denne type mangler konteksten af en tidszone eller offset-fra-UTC. Så denne type kan ikke bruges til at repræsentere et øjeblik, et bestemt punkt på tidslinjen. (For at spore et øjeblik skal du bruge Oracle-typen TIMESTAMP WITH TIME ZONE
.)
Bemærk, at denne Oracle-navngivning adskiller sig fra SQL-standarden. I standarden er en DATE
type er en værdi, der kun gælder for dato, uden klokkeslæt og ingen tidszone eller forskydning.
java.time.LocalDateTime
Så denne type er knyttet til LocalDateTime
i Java.
Hentning.
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
Opbevaring.
myPreparedStatement.setObject( … , ldt ) ;
Tekst
Bemærk, at vi i koden ovenfor bruger smarte objekter i stedet for dumme strenge.
Dato-tidsobjekter såsom LocalDateTime
er ikke String
og hold ikke tekst. De repræsenterer internt deres værdi på deres egen måde. Du kan parse en streng som et dato-tids-objekt, og du kan bede date-time-objektet om at generere tekst. Men teksten og dato-tidsobjektet er adskilte og adskilte.
java.time klasser bruger standard ISO 8601 formater ved parsing/generering af strenge.
String output = ldt.toString() ;
Parsing.
Du kan generere tekst i andre formater. Du kan angive dit eget brugerdefinerede format ved at kalde DateTimeFormatter.ofPattern
. Normalt bedre at formatere automatisk ved at kalde DateTimeFormatter.ofLocalized…
metoder.
Dette er allerede blevet dækket mange mange gange på Stack Overflow. Så søg for at lære mere.
LocalDateTime ldt = LocalDateTime.parse( "2020-01-23T01:23:45.123456789" ) ;
Om java.time
java.time
framework er indbygget i Java 8 og nyere. Disse klasser erstatter den besværlige gamle arv
dato-tidsklasser såsom java.util.Date
, Calendar
, &>SimpleDateFormat
.
For at lære mere, se Oracle Tutorial . Og søg i Stack Overflow for mange eksempler og forklaringer. Specifikationen er JSR 310 .
Joda-Time projekt, nu i vedligeholdelsestilstand , anbefaler migrering til java.time klasser.
Du kan udveksle java.time objekter direkte med din database. Brug en JDBC-driver
i overensstemmelse med JDBC 4.2
eller senere. Intet behov for strenge, intet behov for java.sql.*
klasser. Hibernate 5 og JPA 2.2 understøtter java.time .
Hvor får man java.time klasserne?
- Java SE 8
, Java SE 9
, Java SE 10
, Java SE 11
, og senere - En del af standard Java API med en bundtet implementering.
- Java 9 tilføjer nogle mindre funktioner og rettelser.
- Java SE 6
og Java SE 7
- Det meste af java.time funktionalitet er back-porteret til Java 6 &7 i ThreeTen-Backport .
- Android
- Senere versioner af Android-pakkeimplementeringer af java.time klasser.
- For tidligere Android (<26), ThreeTenABP projektet tilpasser ThreeTen-Backport (nævnt ovenfor). Se Sådan bruger du ThreeTenABP... .