Obtenga la fecha actual en formato java.sql.Date
jdbc java.util.date (8)
Necesito agregar la fecha actual en una declaración preparada de una llamada JDBC. Necesito agregar la fecha en un formato como yyyy/MM/dd
.
Lo he intentado con
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
Date date = new Date();
pstm.setDate(6, (java.sql.Date) date);
pero tengo este error:
threw exception
java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
¿Hay alguna manera de obtener un objeto java.sql.Date
con el mismo formato?
tl; dr
myPreparedStatement.setObject( // Directly exchange java.time objects with database without the troublesome old java.sql.* classes.
… ,
LocalDate.parse( // Parse string as a `LocalDate` date-only value.
"2018-01-23" // Input string that complies with standard ISO 8601 formatting.
)
)
java.time
El enfoque moderno utiliza las clases java.time que suplantan a las viejas y problemáticas clases antiguas como java.util.Date
y java.sql.Date
.
Para un valor de solo fecha, use LocalDate
. La clase LocalDate
representa un valor de solo fecha sin hora del día y sin zona horaria.
Las clases java.time usan formatos estándar al analizar / generar cadenas. Entonces no es necesario especificar un patrón de formateo.
LocalDate ld = LocalDate.parse( input ) ;
Puede intercambiar directamente objetos java.time con su base de datos utilizando un controlador JDBC que cumpla con JDBC 4.2 o posterior. Puede olvidarse de transformar dentro y fuera de las clases java.sql. *.
myPreparedStatement.setObject( … , ld ) ;
Recuperación:
LocalDate ld = myResultSet.getObject( … , LocalDate.class ) ;
Acerca de java.time
El marco java.time está integrado en Java 8 y posterior. Estas clases suplantan a las problemáticas antiguas clases legacy fecha y hora como java.util.Date
, Calendar
y SimpleDateFormat
.
El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .
Para obtener más información, consulte el Tutorial de Oracle . Y busque para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .
¿Dónde obtener las clases de java.time?
- Java SE 8 , Java SE 9 y posterior
- Incorporado.
- Parte de la API Java estándar con una implementación integrada.
- Java 9 agrega algunas características y correcciones menores.
- Java SE 6 y Java SE 7
- Gran parte de la funcionalidad de java.time se transfiere a Java 6 y 7 en ThreeTen-Backport .
- Android
- Versiones posteriores de las implementaciones del paquete de Android de las clases java.time.
- Para Android anterior, el proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente). Consulte Cómo utilizar ThreeTenABP ....
El proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
y more .
Estos son demasiado largos.
Solo usa:
new Date(System.currentTimeMillis())
Hará: new Date(Instant.now().toEpochMilli())
Puedes alcanzar tu objetivo de la siguiente manera:
long millis=System.currentTimeMillis();
java.sql.Date date=new java.sql.Date(millis);
o
// create a java calendar instance
Calendar calendar = Calendar.getInstance();
// get a java date (java.util.Date) from the Calendar instance.
// this java date will represent the current date, or "now".
java.util.Date currentDate = calendar.getTime();
// now, create a java.sql.Date from the java.util.Date
java.sql.Date date = new java.sql.Date(currentDate.getTime());
Simplemente en una línea:
java.sql.Date date = new java.sql.Date(Calendar.getInstance().getTime().getTime());
Un java.util.Date
no es un java.sql.Date
. Es al revés. Un java.sql.Date
es un java.util.Date
.
Necesitarás convertirlo a java.sql.Date
usando el constructor que demora un java.util.Date
.
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
todo lo que tienes que hacer es esto
Calendar currenttime = Calendar.getInstance(); //creates the Calendar object of the current time
Date sqldate = new Date((currenttime.getTime()).getTime()); //creates the sql Date of the above created object
pstm.setDate(6, (java.sql.Date) date); //assign it to the prepared statement (pstm in this case)
new java.sql.Date(Calendar.getInstance().getTimeInMillis());