JAVA: Date e ora legale con runtime JDK 1.6
linkDescrizione del difetto
Errore durante il salvataggio di una riga da pannello nel caso di campo data e valore coincidente con il giorno di entrata in vigore dell'ora legale. Il malfunzionamento si presentava solo se l'applicazione utilizzava la versione 1.6 o successive del run-time Java ed era dovuto al fatto che il comportamento della funzione SimpleDateFormat.parse è cambiato a partire dalla versione 1.6 del run-time Java.
Quando l'utente digita una data in un pannello, infatti, il sistema tenta di convertire la stringa digitata dall'utente in una data valida utilizzando la classe SimpleDateFormat. Quest'ultima nel caso venga fornita la stringa 30/03/2008 (data di entrata in vigore dell'ora legale dell'anno 2008 in Italia) restituisce la data 30/03/2008 01:00:00 a differenza di quanto faceva il run-time Java delle versioni precedenti che restituiva la sola parte data. In questo caso particolare il sistema credeva che la stringa fornita contenesse solo un'ora quindi provava ad azzerare la parte data ottenuta dalla conversione impostandola al 30/12/1899 (zero del database SqlServer) sottraendo 25569 giorni (poco più di 70 anni) alla data ottenuta.
Effetti del malfunzionamento
- Il sistema credeva, erroneamente, che la stringa digitata dall'utente fosse composta di una sola parte ora quindi sottraeva circa 70 anni nel tentativo di azzerare la parte data del campo DateTime.
Soluzioni
Utilizzare la versione 8.0.3560.
Funzionalità interessate
La scrittura tramite pannello di un campo data in una applicazione web in tecnologia Java e C#.
Ultima modifica: 09/03/2009 / Validità: da 8.0.3560