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?
- Java SE 8
, Java SE 9
, Java SE 10
, Java SE 11
e versioni successive:parte dell'API Java standard con un'implementazione in bundle.
- Java 9 aggiunge alcune funzionalità e correzioni minori.
- Java SE 6
e Java SE 7
- La maggior parte di java.time la funzionalità è stata trasferita su Java 6 e 7 in ThreeTen-Backport .
- Android
- Versioni successive delle implementazioni in bundle Android di java.time classi.
- Per Android precedente (<26), ThreeTenABP il progetto adatta ThreeTen-Backport (menzionato sopra). Vedi Come usare ThreeTenABP... .