Mysql
 sql >> Database >  >> RDS >> Mysql

EEE MMM gg HH:mm:ss ZZZ aaaa formato data in 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);

Sto usando le classi moderne in java.time pacchetto. Noti che il codice non è solo più semplice, una volta che hai familiarizzato con lo stile di scrittura fluente delle classi più recenti, è anche più chiaro.

Se vuoi essere moderno al 100%, dovresti anche controllare se il tuo driver JDBC MySQL più recente non accetterebbe un LocalDate direttamente senza conversione in java.sql.Date . Dovrebbe.

Alcuni dettagli da notare

  • Se hai bisogno che il tuo codice venga eseguito su computer al di fuori del tuo controllo, fornisci sempre le impostazioni locali al formattatore, altrimenti la stringa della tua data non può essere analizzata su un computer con una lingua non inglese. Puoi usare Locale.ROOT per una locale neutrale (parla inglese).
  • Se puoi, evita le abbreviazioni del fuso orario di tre lettere. Molti sono ambigui. EET è in realtà solo metà del fuso orario poiché alcuni luoghi in cui viene utilizzato sono ora EEST (ora estiva). È meglio utilizzare un ID di fuso orario lungo come Europe/Bucharest o un offset da UTC come +02:00 .

Questi punti sono validi indipendentemente dall'utilizzo di DateTimeFormatter o SimpleDateFormat .

Se non puoi o non vuoi passare alle classi più recenti consigliate, la correzione del codice è:

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

Sto usando zzz minuscolo poiché è documentato che corrisponde a un nome di fuso orario di tre lettere, so che ZZZ maiuscolo funziona anche. Ho aggiunto la localizzazione. E forse la cosa più importante, nel formato necessario ho cambiato YYYY (anno settimanale) a yyyy (anno solare) e DD (giorno dell'anno) a dd (giorno del mese). Tutte queste lettere si trovano nella documentazione .