2011-10-31 4 views
6

Pourquoi quand je donne la chaîne de date d'entrée avec le fuseau horaire GMT, SimpleDateFormat l'analyse et sort EET timezone? Java SimpleDateFormat Wrong Timezone après l'analyse

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)); 

Et la sortie est: Mon 31 octobre 2011 13:19:56 EET plutôt que Lun 31 octobre 13:19:56 GMT 2011

Répondre

10

Vous imprimez le résultat de Date.toString(). Un Date n'a aucun concept d'un fuseau horaire - c'est juste le nombre de millisecondes depuis l'époque UTC Unix. Date.toString()Toujours utilise le fuseau horaire par défaut du système.

Notez que vous ne devriez pas être attendu « Mon 31 octobre 13:19:56 GMT 2011 » étant donné que vous avez donné un temps qui spécifie une heure de GMT 11, pas 13.

Si vous voulez Pour utiliser un fuseau horaire spécifique pour l'impression, vous devez utiliser un autre DateFormat pour l'impression, plutôt que d'utiliser Date.toString(). (Date.toString() continue à causer de la confusion comme ceci, c'est vraiment dommage.)

+0

Merci, pour une réponse rapide. – IgorDiy