DateFormat.parse()
non è una query (cosa che restituisce un valore e non cambia lo stato del sistema). È un comando che ha l'effetto collaterale di aggiornare un oggetto interno Calendar
. Dopo aver chiamato parse()
devi accedere al fuso orario accedendo allo Calendar
Calendar
o chiamando DateFormat.getTimeZone()
. A meno che non si desideri eliminare il fuso orario originale e utilizzare l'ora locale, non utilizzare il valore restituito Date
da parse()
. Utilizzare invece l'oggetto del calendario dopo l'analisi. E lo stesso vale per il metodo di formattazione. Se si desidera formattare una data, passare il calendario con le informazioni sul fuso orario nell'oggetto DateFormat
prima di chiamare format()
. Ecco come è possibile convertire un formato ad un altro formato di preservare il fuso orario originale:
DateFormat originalDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");
DateFormat targetDateFormat = new SimpleDateFormat("EEE., MMM. dd, yyyy");
originalDateFormat.parse(origDateString);
targetDateFormat.setCalendar(originalDateFormat.getCalendar());
return targetDateFormat.format(targetDateFormat.getCalendar().getTime());
E 'disordinato, ma necessario in quanto parse()
non restituisce un valore che conserva fuso orario e format()
non accetta un valore che definisce un fuso orario (la classe Date
).
fonte
2012-09-27 20:24:02
Proprio così ... prova a stampare 'System.out.println (df.format (df.parse (df.format (cal.getTime())))); 'e funziona come previsto :-) –
Ok, apparentemente il problema viene dal toString()? Grazie per il consiglio. –
@MaximeLaval: Da 'Date.toString' in particolare, sì - e devi essere consapevole che un' Date' è solo un istante, non in un particolare fuso orario o calendario. –