Warum gibt der Kalender die falsche Stunde mit der richtigen Zeitzone zurück?

8


Die zurückgegebene Uhrzeit und das Datum stimmen mit außer für die Stunde, also um 1 Stunde weniger als es sein sollte.

Ich scheine alles einzustellen, was nötig ist, um die richtige Zeit und das richtige Datum zu bekommen:

%Vor%


Meine Zeitzone ist Eastern Standard Time , aka UTC/GMT-5:00 . Keine dieser Zeilen hat Auswirkungen:

%Vor%

... aber jede dieser Optionen legt meine gewünschte Zeitzone fest.

Hier ist mein Versuch, bei dem ich der Instanz Calendar fälschlicherweise 1 Stunde hinzufüge: %Vor%


Ausgabe:

%Vor%

WRONG - Es soll 11:05:43:543 sein! ( ps. - Leider kann ich Joda-Time nicht verwenden )

    
Ian Campbell 10.10.2013, 15:12
quelle

3 Antworten

3

1) Stellen Sie die Zeitzone in SimpleDateFormat

ein

2) Benutze entweder UTC oder eine "echte" Zeitzone wie ("Österreich / Wien");
(Name des Landes und größte Stadt in TimeZone sehen sicher zu)
EST (= UTC-5) ist keine Zeitzone, die für Rechenzwecke sehr geeignet ist, weil es die Zeit ohne Sommerzeit ist.

Ein weiteres Beispiel aus Mitteleuropa:
Im Winter verwenden wir MEZ (CET), im Sommer (Sommerzeit) verwenden wir (MESZ = CEST).
Aber du willst, dass dein Computer das für dich berechnet, also benutze das nicht:

Zeitzonen sind geo-politisch, daher wird der Name des Landes benötigt.
Jedes Land kann entscheiden, seine Zeitzone zu ändern, wenn sie wollen (z. B. Russland vor einiger Zeit, und Spanien diskutiert jetzt.)

    
AlexWien 10.10.2013, 16:17
quelle
1

Der Kalender berücksichtigt keine Sommerzeit.

Laut diesem Beitrag: Wie kann man die Sommerzeit mit Hilfe von Zeitzone in Java

  

Die 3-Buchstaben-Abkürzungen sollten unbedingt zugunsten von TZDB-Zonen-IDs vermieden werden. EST ist Eastern Standard Time - und Standardzeit beobachtet nie DST; es ist nicht wirklich ein Vollzeitzonen-Name. Es ist der Name, der für einen Teil einer Zeitzone verwendet wird. (Leider habe ich für dieses Konzept der "Halbzeitzone" keinen guten Begriff gefunden.)

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST"));

Dies ist ein guter Ausgangspunkt: Ссылка

    
Anubian Noob 10.10.2013 15:14
quelle
0


Für die Nachwelt ist hier mein verbesserter Code basierend auf dem Beitrag "Wie?" um die Sommerzeit mit Timezone in Java zu verbessern ":

%Vor%


Beachten Sie, dass ich SimpleDateFormat statt von DateFormat verwende, um das Ausgabeformat anzupassen (Sie müssen nicht beide verwenden).

    
Ian Campbell 15.10.2013 14:12
quelle

Tags und Links