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?
- Java SE 8
, Java SE 9
, Java SE 10
, Java SE 11
, y posteriores:parte de la API de Java estándar con una implementación integrada.
- Java 9 agrega algunas funciones y correcciones menores.
- Java SE 6
y Java SE 7
- La mayor parte del java.time la funcionalidad está adaptada a Java 6 y 7 en ThreeTen-Backport .
- Android
- Versiones posteriores de implementaciones de paquetes de Android de java.time clases.
- Para Android anterior (<26), ThreeTenABP proyecto adapta ThreeTen-Backport (mencionado anteriormente). Consulte Cómo usar ThreeTenABP… .