sql >> Database teknologi >  >> RDS >> Oracle

Sådan konverteres Oracle Date-format til Java?

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?



  1. migrerer til mysql i django

  2. Hvordan kan jeg få de sidste 12 måneder fra den nuværende dato PLUS ekstra dage til den 1. i sidste måned hentet

  3. Android studio applikationsforbindelse med mysql

  4. MySQL - Kan ikke indsætte NULL-værdi i kolonne, men jeg har angivet en standardværdi?