Pourquoi le Calendrier de retour à la mauvaise heure avec le bon fuseau horaire?

L'heure et la date de retour sont corrects sauf pour l'heure, ce qui est 1 heure de moins que ce qu'elle devrait être.

J'ai l'impression de réglage de tout ce qui est nécessaire pour obtenir l'heure et la date correctes:

 - I'm using Calendar.getInstance(), instead of new Date()
 - I'm setting the timezone of the Calendar instance with Timezone.getTimeZone
 - I'm using DateFormat and SimpleDateFormat to format the output

Mon fuseau horaire est Eastern Standard Time, aka UTC/GMT-5:00. Aucun de ces lignes sont en effet:

 - cal.setTimeZone(TimeZone.getTimeZone(cal.getTimeZone().getDisplayName()));
 - cal.setTimeZone(TimeZone.getTimeZone("EST"));
 - cal.setTimeZone(TimeZone.getTimeZone("UTC"));
 - cal.setTimeZone(TimeZone.getTimeZone("GMT"));
 - cal.setTimeZone(TimeZone.getTimeZone("GMT-5:00"));

...mais chacune de ces options jeux de mon choix du fuseau horaire.


Voici ma tentative, où j'ai le tort d'ajouter 1 heure à la Calendar exemple:

PrintWriter output = null;

try {
  output = new PrintWriter(
   new BufferedWriter(new FileWriter("output.txt", true)));

  DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:ms MM/dd/yyyy");
  Calendar cal = Calendar.getInstance();

  //...doesn't seem to be working:
  cal.setTimeZone(TimeZone.getTimeZone(cal.getTimeZone().getDisplayName()));

  /*
   * adding an extra hour here, to make up for the incorrect hour value???
   * ...without this line, everything is correct except the hour = n - 1:
   */
  //cal.setTimeInMillis(cal.getTimeInMillis() + (1000 * 60 * 60));

  //printing to console here:
  System.out.println(dateFormat.format(cal.getTime()));
  System.out.println(cal.getTimeZone().getDisplayName());

  //printing to the log-file here:
  output.println(dateFormat.format(cal.getTime()));
  output.println(cal.getTimeZone().getDisplayName());

} catch (IOException e) {
  e.printStackTrace();

} finally {
  if (output != null) {
    output.close();
  }
}

Sortie:

10:05:43:543 10/10/2013
GMT-05:00

MAL -- C'est censé être 11:05:43:543! (p.s. -- Je ne peux malheureusement pas utiliser Joda-Time)

L'heure d'été?
Je ne sais pas, bonne question... la lumière du jour-période d'épargne, cette année, apparemment commence dimanche 10 Mars et se termine le dimanche 3 novembre. Pourrait Calendar et/ou Timezone pas comptabilité pour cela?
Il y a une réponse dans le lien: stackoverflow.com/questions/10545960/... j'Espère qu'il sera utile.
"Mon fuseau horaire est Heure normale de l'est". N'est-il pas Orientale Jour de Temps à cette époque de l'année?
La formule changé en 2007 il pourrait donc être intéressant de jouer avec pour voir si/quand il traverse.

OriginalL'auteur Ian Campbell | 2013-10-10