2011-10-31 13 views
6

Perché quando fornisco la stringa di data di input con il fuso orario GMT, SimpleDateFormat lo analizza e emette il fuso orario EET? Java SimpleDateFormat Timezone errato dopo l'analisi

public static String DATE_FORMAT="dd MMM yyyy hh:mm:ss z"; 
public static String CURRENT_DATE_STRING ="31 October 2011 11:19:56 GMT"; 
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US); 
    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); 
    System.out.println(simpleDateFormat.parseObject(CURRENT_DATE_STRING)); 

e l'uscita è: Lun 31 Ott 13:19:56 EET 2011 piuttosto che Lun 31 Ott 13:19:56 GMT 2011

risposta

10

Stai stampare il risultato di Date.toString(). Un Date non ha alcun concetto di fuso orario: è solo il numero di millisecondi dall'epoca UTC Unix. Date.toString()sempre utilizza il fuso orario predefinito del sistema.

Nota che non dovrebbe essere in attesa "Mon 31 ottobre 13:19:56 GMT 2011", dato che hai dato un tempo che specifica un ora GMT del 11, non 13.

Se si desidera per utilizzare un fuso orario specifico per la stampa, è necessario utilizzare un altro DateFormat per la stampa anziché utilizzare Date.toString(). (Date.toString() continua a causare confusione in questo modo, è davvero un peccato.)

+0

Grazie, per una risposta rapida. – IgorDiy