java.Zeit: Hat die MEZ-zone ist der Auffassung Sommerzeit?
Ich das neue java.time
Implementierung von Java 8, und wundere mich über die Ausgabe von UTC zu MEZ Zeit umrechnungsergebnis.
ZonedDateTime utcTime = ZonedDateTime.of(2014, 7, 1, 8, 0, 0, 0, ZoneId.of("UTC"));
ZonedDateTime cetTime = ZonedDateTime.ofInstant(utcTime.toInstant(), ZoneId.of("CET"));
System.out.println("Summer-UTC-Time: " + utcTime);
System.out.println("Summer-CET-Time: " + cetTime);
System.out.println();
utcTime = ZonedDateTime.of(2014, 1, 1, 8, 0, 0, 0, ZoneId.of("UTC"));
cetTime = ZonedDateTime.ofInstant(utcTime.toInstant(), ZoneId.of("CET"));
System.out.println("Winter-UTC-Time: " + utcTime);
System.out.println("Winter-CET-Time: " + cetTime);
Ich erwartet, dass die CET-Zeit würde immer +1 von der UTC-Zeit, aber stattdessen bekam ich:
Summer-UTC-Time: 2014-07-01T08:00Z[UTC]
Summer-CET-Time: 2014-07-01T10:00+02:00[CET] -> +2 **Unexpected**
Winter-UTC-Time: 2014-01-01T08:00Z[UTC]
Winter-CET-Time: 2014-01-01T09:00+01:00[CET] -> +1 Expected
Also anscheinend ich haben, um mit der Sommerzeit, die ich nicht erwarten, dass bei der Verwendung von MEZ. Ist die java.time
MEZ in Wahrheit CEST? Und wenn ja, welche zone sollte ich verwenden, wenn ich brauche MEZ?
CET
ist nicht identisch mitUTC+1
wenigstens, wie die IANA time zone database definiert. Und das ist, was Java -, POSIX-und mehrere Datenbank-Anbieter verwenden.- Ihr Kommentar 'CET ist nicht identisch mit UTC+1' zu sein scheint, der die meisten richtigen Antworten - obwohl die wiki Referenz-Dokumente einen festen UTC-offset von +1 (+2 MESZ in Regionen mit Sommerzeit). Ich habe einen kurzen Blick auf die IANA aber das hat nicht geholfen, mich zu verstehen, seine definition. Dennoch, wenn Sie fügen Sie Ihren Kommentar als Antwort (vielleicht einige mehr hintergrund-Informationen) ich würde es akzeptieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den IANA definition von MEZ ist, dass es folgt das Zeit-zone die Regeln der zentralen Europa, die sowohl winter-und Sommer-Zeit. Die Regeln gesehen werden kann hier, die zeigt, dass "MEZ" basiert auf "C-Eur" umfasst Sommer-Zeit.
In
java.time
Sie können auch sehen, das vollständige Regelwerk:ausgegeben:
Der Schlüssel hier ist, um zu verstehen, dass die time-zone-id und die "kurzer name" der Kennung sind zwei verschiedene Elemente. Der identifier ist immer behoben, da "CET", aber der name ändert sich zwischen "CET" und "CEST".
Weil Sie wissen, das offset und möchten nicht mit DTS, warum nicht
ZoneOffset.ofHours(1)
Methode stattZoneId.of("CET")
?Auch Sie können callnormalized()
auf jedem amp; zoneid Instanz zu machen, einen festen offset aber klingt weniger zuverlässig als mit einem offset von Anfang an.Vom Amp; zoneid javadoc:
Wenn du nicht mit festen offsets, dann sind Sie mit den geografischen Regionen, was bedeutet, es hängt von der region, wenn DTS-beobachtet wird oder nicht. Gleiche geht auch mit PST. Du wirst sehen, es beobachtet DTS wenn der Sommer auch die Zeit als PDT bezeichnet. Ja, es ist verwirrend, aber dies ist, wie die meisten tools arbeiten. Lesen Sie den vollständigen Amp; zoneid javadoc für eine ausführliche Erklärung (der
Time-zone IDs
Abschnitt).normalized()
für diese Aufgabe.normalized()
wird eine offset-basierteZoneID
falls dieZoneID
auf, die Sie nennen, es hat einen festen offset als gut, da sonst dieZoneID
ist unverändert zurückgegeben. Oder in anderen Worten, die zugrunde liegendenZoneRules
und damit das Gesamtergebnis zu dieser Frage nicht ändern, wenn mit einemnormalized()
ZoneID
.