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

Come convertire il formato Oracle Date in Java?

tl;dr

No, non lo fai.

  • I database come Oracle memorizzano i valori di data e ora con i propri valori binari definiti internamente, non come testo normale.
  • Oracle DATE tipo contiene un'ora del giorno e una data.

DATE =data + ora

Il DATE il tipo nel database Oracle ha un nome errato. Contiene più di una data (anno, mese e giorno del mese).

Questo tipo rappresenta una data con risoluzione dell'ora in secondi interi. Questo tipo manca del contesto di un fuso orario o di un offset da UTC. Quindi questo tipo non può essere utilizzato per rappresentare un momento, un punto specifico sulla timeline. (Per tenere traccia di un momento, usa Oracle digita TIMESTAMP WITH TIME ZONE .)

Si noti che questa denominazione Oracle differisce dallo standard SQL. Nello standard, un DATE type è un valore di sola data, senza ora del giorno, fuso orario o offset.

java.time.LocalDateTime

Quindi questo tipo viene mappato su LocalDateTime in Giava.

Recupero.

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

Archiviazione.

myPreparedStatement.setObject( … , ldt ) ;

Testo

Si noti che nel codice sopra stiamo usando oggetti intelligenti anziché stringhe stupide.

Oggetti data-ora come LocalDateTime non sono String e non trattenere il testo. Rappresentano internamente il loro valore a modo loro. È possibile analizzare una stringa come oggetto data-ora e chiedere all'oggetto data-ora di generare testo. Ma il testo e l'oggetto data-ora sono separati e distinti.

Il java.time le classi utilizzano lo standard ISO 8601 formati durante l'analisi/generazione di stringhe.

String output = ldt.toString() ;

Analisi.

Puoi generare testo in altri formati. Puoi specificare il tuo formato personalizzato chiamando DateTimeFormatter.ofPattern . Di solito è meglio formattare automaticamente chiamando DateTimeFormatter.ofLocalized… metodi.

Questo è stato già trattato molte volte in Stack Overflow. Quindi cerca per saperne di più.

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

Informazioni su java.time

Il java.time framework è integrato in Java 8 e versioni successive. Queste classi soppiantano la vecchia e problematica eredità classi data-ora come java.util.Date , Calendar , &SimpleDateFormat .

Per ulteriori informazioni, consulta il Tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .

Il Joda-Time progetto, ora in modalità di manutenzione , consiglia la migrazione a java.time classi.

Puoi scambiare java.time oggetti direttamente con il tuo database. Utilizzare un driver JDBC conforme a JDBC 4.2 o più tardi. Non c'è bisogno di stringhe, non c'è bisogno di java.sql.* classi. Hibernate 5 e JPA 2.2 supportano java.time .

Dove ottenere le classi java.time?