JAVA TimeZone Ausgabe EDT Vs EST

8

Ich bin ein Neuling in Java und konnte das seit einiger Zeit nicht mehr herausfinden.

Ich verwende Windows XP und der Computer ist auf TimeZone eingestellt: Eastern Time (USA und Kanada) .

Ich habe eine Java-Anwendung, die die aktuellen Systemzeit- und Zeitzoneninformationen verwendet und eine Zeichenfolge wie: 20101012 15:56:00 EST in eine Datei schreibt.

Der letzte Teil des obigen Datums, d. h .: die Zeitzone, wechselt von EST zu EDT, wenn ich mein Systemdatum ändere.

Genau gesagt: Von November (zB: Nov. 2009) bis März (März 2010) ist es EST, sonst EDT.

EST ist was ich will IMMER und nicht EDT.

Gibt es eine bestimmte Klasse / Funktion, mit der ich es immer als EST lesen kann?

Warten auf Antwort.

Danke für Ihre Antworten. Nun, ich habe vergessen, ein paar Dinge zu erwähnen.

  1. Ich möchte, dass mein Computer in den Windows-Zeitzoneneinstellungen auf Eastern Time (USA und Kanada) eingestellt ist.

  2. In einfachen Worten: Was ich machen möchte ist: Erhalte meine Maschinenzeit und schreibe sie in eine Textdatei

  3. Ich bin mir der Sommerzeit bewusst, die von März bis November stattfindet.

Aber das Problem ist, wenn ich meine Maschinenzeit in die Datei schreibe, wird es als 2010 01 12 15:56:00 EST geschrieben, wenn Sommerzeit (DST) nicht vorhanden ist und als 20101012 15:56:00 EDT, wenn DST vorhanden ist. Meine Sorge ist, ob es DST ist oder nicht, ich möchte EST immer schreiben.

    
ViV 14.10.2010, 13:03
quelle

6 Antworten

3

Ich denke nicht, dass Sie tun sollten, was Sie vorschlagen.

Sie sagen, dass unabhängig davon, was Ihre Systemzeitzone gerade ist (Eastern Time ist NICHT Ihre Zeitzone, sondern UTC + 5 oder +4), Sie möchten, dass EST angezeigt wird. Das ist einfach falsch. Angenommen, es ist im Sommer, und Ihr Computer denkt, es ist 15:00 vor Ort. Sie drucken die aktuelle Uhrzeit und Sie erhalten:

  

Die Uhrzeit drucke ich hier aus: 2010 06 15 15:00:00 EDT

Aus irgendeinem Grund denken Sie, dass der EDT unangenehm ist, und Sie ändern ihn in EST:

  

Ich drucke dies aus: 2010 06 15 15:00:00 EST

Wenn Sie das Snippet jedoch innerhalb der nächsten Stunde an jemand anderen senden, werden Sie gezwungen sein zu denken, dass Sie aus der Zukunft gereist sind! Seit 15:00:00 EST ist 16:00:00 EDT.

    
Mike Axiak 14.10.2010, 18:00
quelle
2

Ich würde eine benutzerdefinierte Zone erstellen:

%Vor%

Dies wird als EST gemeldet und ist immer 5 Stunden vor UTC. Wählen Sie insbesondere keine vorhandene Zeitzone aus oder Sie werden schließlich gebrannt, wenn ein Zonen-Update die Definition ändert.

Beachten Sie, dass bei der EST-Eingabe die von Ihnen protokollierten Daten nur für fünf Monate im Jahr mit der vom System angezeigten Zeit übereinstimmen. Die anderen 7 Monate wirst du eine Stunde frei haben. Es kann das Parsen der Datei vereinfachen, aber es wird Benutzer verwirren.

    
Devon_C_Miller 14.10.2010 17:17
quelle
0

Es sollte angemerkt werden, dass während der Sommermonate der östlichen Zeitzone so ziemlich jedes größere Zentrum die Sommerzeit nutzt, damit Ihnen die Zeit, die den Menschen in dieser Zeitzone wichtig ist, richtig angezeigt wird.

Wenn Sie möchten, dass es sich um eine bestimmte Zeitzone und nicht um die Standard / Systemzeitzone handelt, können Sie die TimeZone zu EST über etwas wie folgt:

%Vor%

Obwohl in der obigen Beschreibung von Michael erwähnt, empfiehlt die Dokumentation, einen lokalen vollständigen Namen wie "America / New York" anstelle der allgemeinen Zeitzonenabkürzung zu verwenden.

Wenn Sie behaupten wollen, dass es wirklich EST ist, obwohl Sie wissen, dass es EDT ist, dann könnten Sie Folgendes tun: Verwenden Sie eine SimpleDateFormat -Instanz mit einem benutzerdefinierten Muster, das die Zeitzoneninformationen nicht enthält, dann kleben Sie "EST" auf das Ende der Zeichenfolge, die Sie schreiben.

    
Ophidian 14.10.2010 13:27
quelle
0

Ihre Frage ist immer noch nicht klar.

Ich habe nicht verstanden, ob Sie einfach EST-Zeichen erzwingen wollen, selbst wenn Ihr Gerät so eingestellt ist, dass es DST automatisch ändert, oder was Sie wollen, ist die tatsächliche Zeit auf EST.

Sie haben also zwei Möglichkeiten:

  1. Ihre Maschinenzeit ist auf 2:15 Uhr eingestellt und die Sommerzeit ist eingeschaltet, und Sie möchten 2:15 Uhr EST schreiben (was nicht die korrekte tatsächliche Zeit ist), sollten Sie SimpleDateFormat verwenden. Auf diese Weise werden Sie über die Zeit lügen. Aber du weißt sowieso, was am besten zu dir passt.

  2. Ihre Maschinenzeit ist auf 2:15 Uhr eingestellt und die Sommerzeit ist eingeschaltet, und Sie wollen 1:15 Uhr EST schreiben. Sie sollten folgendes verwenden: TimeZone.setDefault (TimeZone.getTimeZone ("EST"))

Leo Holanda 14.10.2010 17:20
quelle
0

Die Lösung hängt davon ab, warum Sie dieses Timeout schreiben und was Sie damit machen wollen, wenn Sie es wieder einlesen (was es tun wird, nicht "was Sie wollen"). Immer als EST zu schreiben ist eine falsche Darstellung der Fakten. Wenn EDT in Kraft ist, ist es tatsächlich nicht , tatsächlich EST. Wenn Sie versuchen, einen "absoluten" Zeitpunkt zu ermitteln, empfehle ich, in GMT anstelle einer beliebigen Zeitzone zu arbeiten.

    
Stephen P 14.10.2010 17:46
quelle
-1
  

Das Gerät ist auf TimeZone eingestellt:   Eastern Time (USA und Kanada).

Das ist keine echte Zeitzone (auch EDT und EST). Eine Zeitzone (wie von Java verstanden) ist etwas wie "America / Phoenix", eine ID für eine administrative Zeitzone, die sowohl einen Basisoffset als auch (optional) an bestimmten Tagen auf Sommerzeit umstellt. Beides kann sich ändern, und solche Änderungen müssen bei der Interpretation historischer Daten berücksichtigt werden.

Wenn Sie also keine DST-Schalter haben möchten, wählen Sie eine Zeitzone, in der die Sommerzeit nicht eingehalten wird. Es ist möglich, dass es keine solche Zeitzone gibt und der Versuch, so zu handeln, als würde es unmögliche Daten geben könnte.

    
Michael Borgwardt 14.10.2010 13:22
quelle

Tags und Links