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:
Meine Zeitzone ist Eastern Standard Time
, aka UTC/GMT-5:00
. Keine dieser Zeilen hat Auswirkungen:
... aber jede dieser Optionen legt meine gewünschte Zeitzone fest.
Calendar
fälschlicherweise 1 Stunde hinzufüge:
%Vor%
Ausgabe:
WRONG - Es soll 11:05:43:543
sein! ( ps. - Leider kann ich Joda-Time nicht verwenden )
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.)
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: Ссылка
Für die Nachwelt ist hier mein verbesserter Code basierend auf dem Beitrag "Wie?" um die Sommerzeit mit Timezone in Java zu verbessern ":
Beachten Sie, dass ich SimpleDateFormat
statt von DateFormat
verwende, um das Ausgabeformat anzupassen (Sie müssen nicht beide verwenden).