Alle Antworten sind gut. Die Java 8+ Versionen haben diese Muster für das Parsen und Formatieren von Zeitzonen: V
, z
, O
, X
, x
, Z
.
Hier sind sie, zum Parsen, gemäß den Regeln aus der Dokumentation:
Symbol Bedeutung Darstellung Beispiele
------ ------- ------------ -------
V Zeitzone-ID zone-id America/Los_Angeles; Z; -08:30
z Zeitzonename zone-name Pacific Standard Time; PST
O lokalisierte Zeitzonen-Abweichung offset-O GMT+8; GMT+08:00; UTC-08:00;
X Zeitzonen-Abweichung 'Z' für null offset-X Z; -08; -0830; -08:30; -083015; -08:30:15;
x Zeitzonen-Abweichung offset-x +0000; -08; -0830; -08:30; -083015; -08:30:15;
Z Zeitzonen-Abweichung offset-Z +0000; -0800; -08:00;
Aber wie sieht es beim Formatieren aus?
Hier ist ein Beispiel für ein Datum (unter der Annahme einer ZonedDateTime
), das zeigt, wie sich diese Muster für unterschiedliche Formatierungsmuster verhalten:
// Die Hilfsfunktion:
static void printInPattern(ZonedDateTime dt, String pattern) {
System.out.println(pattern + ": " + dt.format(DateTimeFormatter.ofPattern(pattern)));
}
// Das Datum:
String strDate = "2020-11-03 16:40:44 America/Los_Angeles";
DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss zzzz");
ZonedDateTime dt = ZonedDateTime.parse(strDate, format);
// 2020-11-03T16:40:44-08:00[America/Los_Angeles]
// Regeln:
// printInPattern(dt, "V"); // Ausnahme!
printInPattern(dt, "VV"); // America/Los_Angeles
// printInPattern(dt, "VVV"); // Ausnahme!
// printInPattern(dt, "VVVV"); // Ausnahme!
printInPattern(dt, "z"); // PST
printInPattern(dt, "zz"); // PST
printInPattern(dt, "zzz"); // PST
printInPattern(dt, "zzzz"); // Pacific Standard Time
printInPattern(dt, "O"); // GMT-8
// printInPattern(dt, "OO"); // Ausnahme!
// printInPattern(dt, "OO0"); // Ausnahme!
printInPattern(dt, "OOOO"); // GMT-08:00
printInPattern(dt, "X"); // -08
printInPattern(dt, "XX"); // -0800
printInPattern(dt, "XXX"); // -08:00
printInPattern(dt, "XXXX"); // -0800
printInPattern(dt, "XXXXX"); // -08:00
printInPattern(dt, "x"); // -08
printInPattern(dt, "xx"); // -0800
printInPattern(dt, "xxx"); // -08:00
printInPattern(dt, "xxxx"); // -0800
printInPattern(dt, "xxxxx"); // -08:00
printInPattern(dt, "Z"); // -0800
printInPattern(dt, "ZZ"); // -0800
printInPattern(dt, "ZZZ"); // -0800
printInPattern(dt, "ZZZZ"); // GMT-08:00
printInPattern(dt, "ZZZZZ"); // -08:00
Im Falle eines positiven Versatzes wird das Zeichen +
überall verwendet (wo jetzt ein -
steht) und nie weggelassen.
Dies funktioniert gut für die neuen Typen von java.time
. Wenn Sie diese für java.util.Date
oder java.util.Calendar
verwenden möchten - nicht alles wird funktionieren, da diese Typen fehlerhaft sind (und daher als veraltet gekennzeichnet sind, bitte verwenden Sie sie nicht).