Problème de fuseau horaire JAVA EDT Vs EST


Je suis un débutant en java et n'ai donc pas pu comprendre cela depuis un certain temps.

J'utilise Windows XP et la machine est définie sur fuseau horaire: Heure de l'Est (États-Unis et Canada).

J'ai une application Java, qui prend l'heure système actuelle et les informations de fuseau horaire et écrit une chaîne comme: 20101012 15:56:00 EST, dans un fichier.

Le dernier morceau de date ci-dessus, c'est-à-dire: le fuseau horaire, passe de EST à EDT lorsque je change ma date système.

Étant précis: De Novembre (par exemple: Nov2009) à mars (mars 2010), il est EST, sinon EDT.

Est est ce que je veux TOUJOURS et pas HAE.

Y a-t-il une classe / fonction particulière, par laquelle je peux toujours la lire comme EST?

En attente de réponse.


Merci pour vos réponses. Eh bien, j'ai oublié de mentionner quelques choses.

  1. Je veux que ma machine soit réglée sur: Heure de l'Est (États-Unis et Canada) dans les paramètres du fuseau horaire Windows.

  2. En termes simples, Ce que je veux faire est: obtenir mon temps machine et l'écrire dans un fichier texte

  3. Je suis au courant de l'heure d'été qui se passe de mars à novembre.

Mais le problème est que lorsque j'écris mon heure machine dans le fichier, elle est écrite comme 2010 01 12 15:56:00 EST si l'heure d'été (DST) n'est pas présente et comme 20101012 15:56:00 EDT, si DST est présent. Ma préoccupation est, que ce soit DST ou non, je veux écrire EST toujours.

Author: ViV, 2010-10-14

6 answers

Je ne pense pas que vous devriez faire ce que vous suggérez.

Vous dites que quel que soit le fuseau horaire de votre système actuellement (l'heure de l'Est n'est PAS votre fuseau horaire, mais UTC+5 ou +4 l'est), vous voulez qu'il affiche EST. C'est juste totalement faux. Supposons que ce soit en été, et votre ordinateur pense que c'est 2010/6/15 15:00 localement. Vous imprimez l'heure actuelle et vous obtenez:

L'heure à laquelle j'imprime ceci à: 2010 06 15 15: 00: 00 EDT

Pour une raison quelconque, vous pensez que l'EDT est désagréable, et vous le changez donc en EST:

J'imprime ceci à: 2010 06 15 15: 00: 00 EST

Cependant, si vous envoyez ensuite cet extrait à quelqu'un d'autre dans l'heure qui suit, il sera obligé de penser que vous avez voyagé du futur! Depuis 15:00:00 HNE est 16:00: 00 HAE.

 3
Author: Mike Axiak, 2010-10-14 18:00:37

Je créerais une zone personnalisée:

TimeZone alwaysEst = TimeZone.getTimeZone("EST+5");

Qui signalera comme EST et sera toujours 5 heures en avance sur UTC. En particulier, ne choisissez pas un fuseau horaire existant ou vous finirez par être brûlé lorsqu'une mise à jour de zone modifie la définition.

Sachez qu'en forçant HNE les dates que vous enregistrez seul match à l'heure affichée par le système pendant 5 mois de l'année. Les 7 autres mois, vous aurez une heure de congé. Cela peut simplifier l'analyse du fichier, mais cela déroutera les utilisateurs.

 2
Author: Devon_C_Miller, 2010-10-14 17:17:44

Il convient de noter que pendant les mois d'été du fuseau horaire de l'Est, à peu près tous les grands centres utilisent l'heure d'Été, de sorte que vous êtes correctement montré l'heure que les gens dans ce fuseau horaire se soucient.

Si vous voulez qu'il s'agisse d'un fuseau horaire spécifique, plutôt que du fuseau horaire par défaut/système, vous pouvez forcer le fuseau horaire à EST via quelque chose comme ceci:

TimeZone est = TimeZone.getTimeZone("EST");

Bien que, comme Michael l'a mentionné ci-dessus, la documentation recommande d'utiliser un nom tel que "America / New York" plutôt que l'abréviation générale du fuseau horaire.

Si vous voulez prétendre que c'est vraiment EST même si vous savez qu'il est EDT, alors je suppose que vous pouvez faire ce qui suit: utilisez une instance SimpleDateFormat avec un modèle personnalisé qui n'inclut pas les informations de fuseau horaire, puis amenez "EST" à la fin de la chaîne que vous écrivez.

 0
Author: Ophidian, 2010-10-14 15:30:20

Votre question n'est toujours pas claire.

Je n'ai pas undestand si vous voulez simplement forcer les caractères 'EST', même si votre machine est configurée pour chage automatiquement DST, ou ce que vous voulez, c'est obtenir l'heure réelle sur EST.

Vous avez donc deux options:

  1. L'heure de votre machine est définie sur 2: 15pm et DST in on effect, et vous voulez écrire 2:15pm EST (ce qui n'est pas l'heure réelle correcte), vous devez utiliser SimpleDateFormat. De cette façon, vous menterez sur le moment. Mais, de toute façon, vous savez ce qui vous convient le mieux.

  2. L'heure de votre machine est définie sur 2: 15pm et DST in on effect, et vous voulez écrire 1:15pm EST, vous devez utiliser: TimeZone.setDefault (fuseau horaire.getTimeZone("HNE"))

 0
Author: L. Holanda, 2010-10-14 17:20:19

La solution dépend de la raison pour laquelle vous écrivez cette fois et de ce que vous voulez en faire lorsque vous la relisez (ce à quoi elle va être utilisée, pas "ce que vous voulez"). Toujours l'écrire comme EST est une fausse représentation des faits. Lorsque l'EDT est en vigueur, c'est et non, en fait, EST. Si vous essayez de suivre un point "absolu" dans le temps, je recommande de travailler dans GMT au lieu de n'importe quel fuseau horaire.

 0
Author: Stephen P, 2010-10-14 17:46:56

La machine est réglée sur fuseau horaire: Heure de l'Est (États-Unis et Canada).

Ce n'est pas un fuseau horaire réel (EDT et EST non plus). Un fuseau horaire (tel que compris par Java) est quelque chose comme "America/Phoenix", qui est un ID pour un fuseau horaire administratif qui a à la fois un décalage de base et (éventuellement) passe à l'heure d'été à des dates spécifiques. Ces deux éléments peuvent changer, et il est nécessaire de prendre en compte ces changements lors de l'interprétation des dates historiques.

Ainsi, si vous ne voulez pas avoir de commutateurs DST, choisissez un fuseau horaire qui n'observe pas DST. Il est possible qu'il n'y ait pas un tel fuseau horaire et essayer d'agir comme s'il y en avait introduirait des dates impossibles.

 -1
Author: Michael Borgwardt, 2010-10-14 13:22:24