étrange problème avec le fuseau horaire, calendrier et SimpleDateFormat
-
21-09-2019 - |
Question
Considérons le code suivant:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy", Locale.US);
long start = sdf.parse("10:30:00 30/09/2009").getTime();
long end = sdf.parse("10:30:00 30/10/2009").getTime();
Calendar c = Calendar.getInstance(Locale.US);
c.setTimeInMillis(start);
System.out.println("Start = " + c.getTime());
c.setTimeInMillis(end);
System.out.println(" End = " + c.getTime());
Lors de l'exécution de ce bout de code, j'ai la sortie suivante:
Start = Wed Sep 30 10:30:00 CEST 2009
End = Fri Oct 30 10:30:00 CET 2009
Pourquoi puis-je obtenir fuseau horaire différent?
Notez que si je mets la première date en août et le second en septembre, la sortie affiche le même fuseau horaire dans les deux cas:
long start = sdf.parse("10:30:00 30/08/2009").getTime();
long end = sdf.parse("10:30:00 30/09/2009").getTime();
affichera:
Start = Sun Aug 30 10:30:00 CEST 2009
End = Wed Sep 30 10:30:00 CEST 2009
J'utilise Java 1.6.0_14
La solution
CEST
est Heure d'Europe Centrale d'été. Il est le même que CET
avec l'heure d'été en vigueur.
Autres conseils
Vous pouvez définir le fuseau horaire par défaut
import java.util.TimeZone;
...
TimeZone.setDefault(TimeZone.getTimeZone("UTC")); // or "Etc/GMT-1"
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy", Locale.US);
long start = sdf.parse("10:30:00 30/09/2009").getTime();
long end = sdf.parse("10:30:00 30/10/2009").getTime();
Calendar c = Calendar.getInstance(Locale.US);
c.setTimeInMillis(start);
System.out.println("Start = " + c.getTime());
c.setTimeInMillis(end);
System.out.println(" End = " + c.getTime());
utilisation TimeZone.getAvailableIDs()
pour voir tous les ID disponibles.
EDIT : vous pouvez également utiliser une nouvelle SimpleTimeZone
TimeZone.setDefault(new SimpleTimeZone(60 * 60 * 1000, "CET"));
Oui, il est lié au temps d'économie de jour. Si vous utilisez un fuseau horaire qui reconnaît l'heure d'été, il sera automatiquement utilisé. Vous pouvez utiliser GMT par exemple, si vous ne voulez pas.