java mysql sql date

Formato de fecha "EEE MMM dd HH: mm: ss ZZZ aaaa" a java.sql.Date



mysql (1)

LocalDate date4 = ZonedDateTime .parse(date, DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH)) .toLocalDate(); java.sql.Date date5 = java.sql.Date.valueOf(date4);

Estoy usando las clases modernas en el paquete java.time . Notará que el código no solo es más simple, una vez que se familiariza con el estilo de escritura fluido de las clases más nuevas, también es más claro.

Si desea ser 100% moderno, también debe verificar si su último controlador JDBC de MySQL no aceptaría un LocalDate directamente sin la conversión a java.sql.Date . Debería.

Algunos detalles a tener en cuenta

  • Si necesita que su código se ejecute en computadoras que están fuera de su control, siempre dé la configuración regional a su formateador, o su cadena de fecha no se puede analizar en una computadora con una configuración regional que no hable inglés. Puede usar Locale.ROOT para una configuración regional neutral (habla inglés).
  • Si puede, evite las abreviaturas de zona horaria de tres letras. Muchos son ambiguos. EET es realmente solo la mitad de la zona horaria, ya que algunos lugares donde se usa ahora están en EEST (horario de verano). Es mejor usar una ID de zona horaria larga como Europe/Bucharest o una compensación de UTC como +02:00 .

Estos puntos son válidos sin importar si usa DateTimeFormatter o SimpleDateFormat .

Si no puede o no quiere pasar a las clases más nuevas recomendadas, la solución a su código es:

SimpleDateFormat formatnow = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH); SimpleDateFormat formatneeded = new SimpleDateFormat("yyyy-MM-dd");

Estoy usando minúsculas zzz ya que esto está documentado para coincidir con un nombre de zona horaria de tres letras, sé que ZZZ mayúsculas también funciona. He agregado la configuración regional. Y quizás lo más importante, en el formato necesario, he cambiado YYYY (año basado en la semana) a yyyy (año calendario) y DD (día del año) a dd (día del mes). Todas esas cartas están en la documentación .

Estoy tratando de convertir EEE MMM dd HH:mm:ss ZZZ yyyy al YYYY-MM-DD , para poder insertarlo en una base de datos MySQL. No recibo ningún error, pero la fecha insertada en mi base de datos es incorrecta y la misma para cada fila ...

String date = Sat Mar 04 09:54:20 EET 2017; SimpleDateFormat formatnow = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZ yyyy"); SimpleDateFormat formatneeded=new SimpleDateFormat("YYYY-MM-DD"); java.util.Date date1 = (java.util.Date)formatnow.parse(date); String date2 = formatneeded.format(date1); java.util.Date date3= (java.util.Date)formatneeded.parse(date2); java.sql.Date sqlDate = new java.sql.Date( date3.getTime() ); pst.setDate(1, sqlDate);