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
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.
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
Vous devez vous connecter pour publier un commentaire.
1) Régler le Fuseau horaire dans SimpleDateFormat
2) Soit utiliser UTC, ou un Temps "réel" de la Zone ("Autriche/Vienne");
(Nom du pays, et la plus grande ville dans le Fuseau horaire de le rechercher pour vous en assurer)
EST (=UTC-5) n'est pas une zone très approprié pour les fins de calcul, car c'est l'heure sans heure d'été.
Un exemple de plus de l'europe centrale:
En Hiver, nous utilisons MEZ (HEC), en Été (heure d'été) que nous utilisons (MESZ = CEST).
Mais vous voulez que votre ordinateur caluclates que pour vous, afin de ne pas l'utiliser:
Les fuseaux horaires sont geo poilitical, donc le nom du pays est nécessaire.
Chaque pays peut décider de modifier son horaire quand ils veulent (e.g la russie il y a quelques temps, et l'espagne est en train de discuter maintenant.)
"America/New_York"
fonctionne dans mon cas. Je me demandais, pourquoi est-ce un fuseau horaire comme"EST"
acceptable paramètre si il ne tient pas compte de l'heure avancée?Probablement parce que c'est un fuseau horaire, unfortunetly pas de celui qui est valud à travers l'ensemble de l'année. Il peut également exister des pays qui n'utilisent pas l'heure d'été
OriginalL'auteur AlexWien
Calendrier ne tient pas compte de l'heure d'été.
Selon ce post: Comment lutter contre l'heure d'été à l'aide de Fuseau horaire en java
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST"));
C'est un bon endroit pour commencer: http://download.java.net/jdk8/docs/api/java/time/ZoneId.html
OriginalL'auteur Anubian Noob
Pour la postérité, voici mon code améliorée basée sur le post "Comment lutter contre l'heure d'été à l'aide de Fuseau horaire en java":
Note que je suis en utilisant
SimpleDateFormat
au lieu deDateFormat
, pour personnaliser le format de sortie (n'avez pas besoin d'utiliser à la fois).OriginalL'auteur Ian Campbell