sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo convertir el formato de fecha de Oracle a Java?

tl;dr

No, no lo haces.

  • Las bases de datos como Oracle almacenan valores de fecha y hora con sus propios valores binarios definidos internamente, no como texto sin formato.
  • Oráculo DATE El tipo contiene una hora del día y una fecha.

DATE =fecha + hora del día

El DATE el tipo en la base de datos de Oracle tiene un nombre incorrecto. Contiene más de una fecha (año, mes y día del mes).

Este tipo representa una fecha con la resolución de la hora del día en segundos enteros. Este tipo carece del contexto de una zona horaria o un desplazamiento desde UTC. Por lo tanto, este tipo no se puede usar para representar un momento, un punto específico en la línea de tiempo. (Para rastrear un momento, use Oracle escriba TIMESTAMP WITH TIME ZONE .)

Tenga en cuenta que este nombre de Oracle difiere del estándar SQL. En el estándar, un DATE type es un valor de solo fecha, sin hora del día y sin zona horaria o compensación.

java.time.LocalDateTime

Entonces, este tipo se asigna a LocalDateTime en Java.

Recuperación.

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

Almacenamiento.

myPreparedStatement.setObject( … , ldt ) ;

Texto

Tenga en cuenta que en el código anterior estamos usando objetos inteligentes en lugar de cadenas tontas.

Objetos de fecha y hora como LocalDateTime no son String y no sostenga el texto. Representan internamente su valor a su manera. Puede analizar una cadena como un objeto de fecha y hora, y puede pedirle al objeto de fecha y hora que genere texto. Pero el texto y el objeto de fecha y hora están separados y son distintos.

El java.time las clases usan el estándar ISO 8601 formatos al analizar/generar cadenas.

String output = ldt.toString() ;

Analizando.

Puede generar texto en otros formatos. Puede especificar su propio formato personalizado llamando a DateTimeFormatter.ofPattern . Por lo general, es mejor formatear automáticamente llamando a DateTimeFormatter.ofLocalized… métodos.

Esto ya se ha cubierto muchas veces en Stack Overflow. Así que busque para obtener más información.

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

Acerca de java.time

El java.tiempo framework está integrado en Java 8 y versiones posteriores. Estas clases reemplazan al viejo y problemático legacy clases de fecha y hora como java.util.Date , Calendar , &SimpleDateFormat .

Para obtener más información, consulte el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

El Joda-Time proyecto, ahora en modo de mantenimiento , recomienda la migración a java.hora clases.

Puede intercambiar java.time objetos directamente con su base de datos. Use un controlador JDBC compatible con JDBC 4.2 o después. Sin necesidad de cadenas, sin necesidad de java.sql.* clases Hibernate 5 y JPA 2.2 admiten java.time .

¿Dónde obtener las clases java.time?