Vedere il seguente pezzo di codice:SimpleDateFormat si comporta in modo incoerente
String timeString = "1980-01-01T14:00:00+0300";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date date2 = sdf.parse(timeString);
// sdf.getCalendar().get(Calendar.ZONE_OFFSET);
System.out.println(sdf.format(date2));
Ora, io sono in un paese che ha +2h
offset, +1
legale (al momento). Se corro questo codice così com'è, verrà stampata
1980-01-01T13:00:00+0200
Se io commento dalla riga che chiede circa il calendario di offset, l'output del programma è
1980-01-01T14:00:00+0300
Qualsiasi idea del perché è che accada e come posso ottenere un risultato coerente?
Per evitare altre cose non chiare: Poiché sto gestendo un codice legacy, java 8 non è un'opzione. E sì, il punto chiave qui è WHY, e non quali sono i workaround? e ci sono 2 i perché:
- Perché mi passano un TZ 0300 e per impostazione predefinita ricevo un 0200 uno? (SimpleDateFormat deve sempre utilizzare TimeZone.getDefault a meno che non sia specificato ).
- Perché dà una risposta diversa solo perché chiamo un getter sull'istanza del calendario.
che cosa è incoerente in esso? quando non usi l'offset, ti dà la data così com'è e quando lo usi cambia in base al fuso orario. –
@RamanShrivastava Chiamare un getter una volta non dovrebbe cambiare l'output della funzione di formattazione. – wonderb0lt