JSF convertDateTime esegue il rendering il giorno precedente

Una data (come il tipo temporale Data) è memorizzata nel mio DB in questo modo: 31.10.2012
Quando lo visualizzo nell’interfaccia utente, viene visualizzato come predefinito per impostazione predefinita: 2012-10-31
Lo converto usando e inaspettatamente si trasforma in
30.10.2012

SimpleDateconverter , alimentato con la stessa data e la stessa stringa di formato restituisce il 31.10.2012 , come previsto.

Cosa mi manca?

Grazie

EDIT: per le date memorizzate come Timestamp la stessa conversione produce risultati corretti, quindi suppongo che abbia qualcosa a che fare con la Date interpretata come la mezzanotte esatta che a sua volta potrebbe essere interpretata come appartenente a 2 giorni diversi. Ma non ho ancora idea di dove definire il comportamento e quale sarebbe la soluzione migliore.

Questo è senza dubbio un problema legato al fuso orario.

Il valore predefinito di JSF è GMT (UTC) nella conversione di data / ora. Quindi, se il fuso orario predefinito della piattaforma del server è GMT + X (non GMT-X), allora il tempo tornerà nel passato X-quantità di ore. Se l’ora è già 00:00:00 (mezzanotte), la data tornerà indietro di un giorno nel passato.

Ci sono 2 modi standard per raggiungere comunque il tuo requisito funzionale:

  1. Comunicare a JSF di utilizzare il fuso orario predefinito della piattaforma server per tutte le conversioni di data / ora aggiungendo il seguente parametro di contesto a web.xml :

      javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE true  
  2. Modifica ogni per specificare esplicitamente il fuso orario specifico per webapp. Dato che sei con sede in Germania e anche il modello di formato della data lo conferma, assumerò CET.

      

In ogni caso, non è consigliabile utilizzare un fuso orario non universale o addirittura misto in tutta l’applicazione. Si consiglia di impostare il fuso orario in tutti i livelli e gli ambienti in UTC. Non solo nel livello server e front-end e livello di presentazione, ma anche nel database SQL e nel livello back-end e di persistenza. In questo modo il codice non è sensibile alle questioni relative al fuso orario e all’ora legale (!) E puoi concentrarti solo sulla modifica del fuso orario solo durante la presentazione, se necessario.

Guarda anche:

  • Buone pratiche per l’ora legale e il fuso orario