Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment convertir le format Oracle Date en Java ?

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 ?