2012-10-16 4 views
0

Pourquoi si j'utilise String.format(Date) il imprime date dans le fuseau horaire par défaut, mais quand j'utilise String.format(Calendar) il imprime dans le fuseau horaire du calendrier. En fait, ce dernier est ce dont j'ai besoin, mais puis-je être sûr que ce comportement persistera?Utilisez String.format() pour Calendar vs. Date

+0

La date n'a jamais de fuseau horaire et Calendar le fait toujours. notre doute? –

+1

Cochez cette case: -http: //stackoverflow.com/questions/2891361/java-how-to-set-timezone-of-a-java-util-date pour savoir comment définir 'TimeZone' pour votre objet date. –

+0

@RohitJain c'est impossible, la date ne contient pas d'informations sur le fuseau horaire. – dhblah

Répondre

1

Comme je l'ai trouvé de la mise en œuvre de String.format (au moins pour JDK 1.5, il a printDateTime(Object, Locale) qui contient ce code:

} else if (arg instanceof Date) { 
    // Note that the following method uses an instance of the 
    // default time zone (TimeZone.getDefaultRef(). 
    cal = Calendar.getInstance(l); 
    cal.setTime((Date)arg); 
    } else if (arg instanceof Calendar) { 
    cal = (Calendar) ((Calendar)arg).clone(); 
    cal.setLenient(true); 
    } else { 

si l'argument pour String.format est de la date, Calendar.getInstance(Locale) est utilisé, ce qui crée calendar dans le fuseau horaire par défaut, si l'argument est Calendar alors le fuseau horaire du calendrier est utilisé De plus, je n'ai pas trouvé de description explicite de ceci et cette méthode est privée, donc il est impossible de supposer que ce comportement ne changera pas