sql >> Base de Datos >  >> RDS >> Mysql

EEE MMM dd HH:mm:ss ZZZ yyyy formato de fecha a java.sql.Date

    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 java.time paquete. Notarás que el código no solo es más simple, una vez que te familiarizas con el estilo fluido de escritura de las clases más nuevas, también es más claro.

Si desea ser 100 % moderno, también debe verificar si su controlador JDBC de MySQL más reciente no aceptaría una LocalDate directamente sin conversión a java.sql.Date . Debería.

Algunos detalles a tener en cuenta

  • Si necesita que su código se ejecute en computadoras fuera de su control, proporcione siempre la configuración regional a su formateador, o su cadena de fecha no se podrá 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 una zona horaria, ya que algunos lugares donde se usa ahora están en EEST (horario de verano). Es mejor usar una identificación de zona horaria larga como Europe/Bucharest o un desplazamiento 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 dado que esto está documentado para coincidir con un nombre de zona horaria de tres letras, sé que mayúsculas ZZZ funciona también He añadido local. 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 (dia del mes). Todas esas letras están en la documentación .