java jdbc java.util.date

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());