tl;dr
Non, vous ne le faites pas.
- Les bases de données telles qu'Oracle stockent les valeurs date-heure avec leurs propres valeurs binaires définies en interne, et non sous forme de texte brut.
- Oracle
DATE
type contient une heure du jour ainsi qu'une date.
DATE
=date + heure de la journée
La DATE
le type dans la base de données Oracle est mal nommé. Il contient plus d'une date (année, mois et jour du mois).
Ce type représente une date avec l'heure du jour se résolvant en secondes entières. Ce type n'a pas le contexte d'un fuseau horaire ou d'un décalage par rapport à UTC. Ce type ne peut donc pas être utilisé pour représenter un moment, un point précis sur la chronologie. (Pour suivre un moment, utilisez le type Oracle TIMESTAMP WITH TIME ZONE
.)
Notez que cette dénomination Oracle diffère de la norme SQL. Dans la norme, une DATE
type est une valeur de date uniquement, sans heure du jour ni fuseau horaire ni décalage.
java.time.LocalDateTime
Donc, ce type correspond à LocalDateTime
en Java.
Récupération.
LocalDateTime ldt = myResultSet.getObject( … , LocalDateTime.class ) ;
Stockage.
myPreparedStatement.setObject( … , ldt ) ;
Texte
Notez que dans le code ci-dessus, nous utilisons des objets intelligents plutôt que des chaînes stupides.
Objets date-heure tels que LocalDateTime
ne sont pas String
et ne contient pas de texte. Ils représentent en interne leur valeur à leur manière. Vous pouvez analyser une chaîne en tant qu'objet date-heure et vous pouvez demander à l'objet date-heure de générer du texte. Mais le texte et l'objet date-heure sont séparés et distincts.
Le java.time les classes utilisent la norme ISO 8601 formats lors de l'analyse/de la génération de chaînes.
String output = ldt.toString() ;
Analyse.
Vous pouvez générer du texte dans d'autres formats. Vous pouvez spécifier votre propre format personnalisé en appelant DateTimeFormatter.ofPattern
. Il est généralement préférable de formater automatiquement en appelant DateTimeFormatter.ofLocalized…
méthodes.
Cela a déjà été couvert plusieurs fois sur Stack Overflow. Alors faites une recherche pour en savoir plus.
LocalDateTime ldt = LocalDateTime.parse( "2020-01-23T01:23:45.123456789" ) ;
À propos de java.time
Le java.time
framework est intégré à Java 8 et versions ultérieures. Ces classes supplantent l'ancien héritage gênant
les classes date-heure telles que java.util.Date
, Calendar
, &SimpleDateFormat
.
Pour en savoir plus, consultez le tutoriel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
Le Joda-Time projet, maintenant en mode maintenance , conseille la migration vers java.time cours.
Vous pouvez échanger java.time objets directement avec votre base de données. Utilisez un pilote JDBC
conforme à JDBC 4.2
ou plus tard. Pas besoin de chaînes, pas besoin de java.sql.*
Des classes. Hibernate 5 et JPA 2.2 prennent en charge java.time .
Où obtenir les classes java.time ?
- Java SE 8
, Java SE 9
, Java SE 10
, Java SE 11
, et versions ultérieures - Partie de l'API Java standard avec une implémentation groupée.
- Java 9 ajoute quelques fonctionnalités et corrections mineures.
- Java SE 6
et Java SE 7
- La plupart du temps java.time la fonctionnalité est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
- Android
- Versions ultérieures des implémentations de bundles Android de java.time cours.
- Pour les versions antérieures d'Android (<26), le ThreeTenABP le projet adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .