Advanced Java Services | ZoneId, ZoneOffset, ZoneRules |
Die Klasse ZoneId kapselt den Namen einer Zeitzone, etwa "Europe/Berlin" oder "Australia/Queensland" oder "Asia/Jakarta". Eine Zeitzone kann verschiedene Offsets zu GMT haben je nach Jahreszeit (Sommer- Winterzeit, englisch DST = Daylight saving time). Mit der abstrakten Klasse ZoneId kann man über Factorymethoden Instanzen erzeugen. ZoneId hat die reale Klasse ZoneOffset als Kindklasse.
Mit den of-Methoden ist es einfach Instanzen von ZoneId zu erzeugen. Gebraucht werden sie u.a. im Zusammenhang mit ZoneOffset, ZoneRules, ZonedDateTime und OffsetDateTime
ZoneId system = ZoneId.systemDefault(); System.out.println(system); // Europe/Berlin ZoneId newYork = ZoneId.of("America/New_York"); System.out.println(newYork); // America/New_York ZoneId java = ZoneId.of("Asia/Jakarta"); System.out.println(java); // Asia/Jakarta ZoneOffset offset = ZoneOffset.ofHours(3); String prefix = "GMT"; // Greenwich Mean Time ZoneId gmt = ZoneId.ofOffset(prefix, offset); System.out.println(gmt); // GMT+03::00 ZoneOffset offset2 = ZoneOffset.ofHours(3); String prefix2 = "UTC"; // Universal Time Coordinated ZoneId utc = ZoneId.ofOffset(prefix2, offset2); System.out.println(utc); // UTC+03::00
Für die from()-Methode braucht man eine Instanz vom Typ TemporalAccessor. Kandidaten dafür sind alle Date/Time-Klassen. Nicht jede kann jedoch verwendet werden. Enthält die Instanz keine entsprechende Information reagiert der Compiler mit einer DateTimeException. Das folgende Codeschnipsel zeigt dies. Instant und LocalDateTime enthalten keine Zoneninformation.
LocalDateTime ldt = LocalDateTime.now(); System.out.println("local time : " + ldt); //ZoneId id = ZoneId.from(ldt); // java.time.DateTimeException: Unable to obtain ZoneId from TemporalAccessor: 2014-10-25T10:45:12.171 of type java.time.LocalDateTime ZoneId jakarta = ZoneId.of("Asia/Jakarta"); LocalDateTime java = LocalDateTime.now(jakarta); System.out.println("java time : " + java); //ZoneId id2 = ZoneId.from(java); //java.time.DateTimeException: Unable to obtain ZoneId from TemporalAccessor: 2014-10-25T10:45:12.171 of type java.time.LocalDateTime System.out.println("-----------------------------------------"); Instant ins = Instant.now(); //ZoneId id2 = ZoneId.from(ins); //java.time.DateTimeException: Unable to obtain ZoneId from TemporalAccessor: 2014-10-25T08:53:06.240Z of type java.time.Instant ZonedDateTime zdt = ZonedDateTime.now(); System.out.println("local zoned time : " + zdt); ZoneId id1 = ZoneId.from(zdt); System.out.println("ZoneId: " + id1); ZonedDateTime zdt2 = ZonedDateTime.now(jakarta); System.out.println("java zoned time : " + zdt2); ZoneId id2 = ZoneId.from(zdt2); System.out.println("ZoneId: " + id2); System.out.println("-----------------------------------------"); OffsetDateTime odt = OffsetDateTime.now(); System.out.println("local offset time : " + odt); ZoneId id3 = ZoneId.from(odt); System.out.println("ZoneId: " + id3); OffsetDateTime odt2 = OffsetDateTime.now(jakarta); System.out.println("java offset time : " + odt2); ZoneId id4 = ZoneId.from(odt2); System.out.println("ZoneId: " + id4);
Ausgabe
local time : 2014-10-25T11:32:46.197 java time : 2014-10-25T16:32:46.212 ----------------------------------------- local zoned time : 2014-10-25T11:32:46.212+02:00[Europe/Berlin] ZoneId: Europe/Berlin java zoned time : 2014-10-25T16:32:46.228+07:00[Asia/Jakarta] ZoneId: Asia/Jakarta ----------------------------------------- local offset time : 2014-10-25T11:32:46.228+02:00 ZoneId: +02:00 java offset time : 2014-10-25T16:32:46.228+07:00 ZoneId: +07:00
ZoneOffset ist eine Unterklasse von ZoneId und kapselt einen Offset zu GMT (UTC) in der Form "+3:00" oder "-4:00"
Die of()-Methode wirft eine DateTimeException wenn das Format nicht stimmt.
ZoneOffset zo = ZoneOffset.ofHours(5); System.out.println(zo); // +5:00 System.out.println(zo.getTotalSeconds()); // 0 System.out.println("-----------------------------------------"); ZoneOffset zo2= ZoneOffset.of("-02:30:00"); System.out.println(zo2); // -2:30 System.out.println(zo2.getTotalSeconds()); // 0 System.out.println("-----------------------------------------"); //ZoneOffset zo2a= ZoneOffset.of("-2:30:00"); // java.time.DateTimeException: Invalid ID for ZoneOffset, invalid format: -2:30:00 //ZoneOffset zo2a= ZoneOffset.of("02:30:00"); // java.time.DateTimeException: Invalid ID for ZoneOffset, invalid format: 02:30:00 //ZoneOffset zo3= ZoneOffset.of("+01:60"); // java.time.DateTimeException: Zone offset minutes not in valid range: abs(value) 60 is not in the range 0 to 59 ZoneOffset zo3= ZoneOffset.of("Z"); System.out.println(zo3); // Z System.out.println(zo3.getTotalSeconds()); // 0
Ausgabe
+05:00 18000 ----------------------------------------- -02:30 -9000 ----------------------------------------- Z 0
Für die from()-Methode braucht man eine Instanz vom Typ TemporalAccessor. Kandidaten dafür sind alle Date/Time-Klassen. Nicht jede kann jedoch verwendet werden. Enthält die Instanz keine entsprechende Information reagiert der Compiler mit einer DateTimeException.
ZoneId jakarta = ZoneId.of("Asia/Jakarta"); ZonedDateTime zdt = ZonedDateTime.now(jakarta); ZoneOffset zo = ZoneOffset.from(zdt); System.out.println(zo); // +7:00 // Verschiebung zu GMT, nicht zur Systemzone System.out.println(zdt.getZone()); ZoneId newyork = ZoneId.of("America/New_York"); ZonedDateTime zdt2 = ZonedDateTime.now(newyork); ZoneOffset zo2 = ZoneOffset.from(zdt2); System.out.println(zo2); // -4:00 // Verschiebung zu GMT, nicht zur Systemzone System.out.println(zdt2.getZone());
Die Klasse ZoneRules enthält die Regeln, wie sich und ob sich der Offset innerhalb einer Zeitzone ändert (Sommerzeit, Winterzeit). Eine ZoneRule wird aus einer ZoneId oder einem ZoneOffset oder aus einer Date/Time-Klasse gewonnen. Enthält die erzeugende Instanz allerdings keine derartigen Regeln, so enthält die ZoneRule nur den Offset als einzige Regel.
// ZoneId -> ZoneRule ZoneId localZoneId = ZoneId.systemDefault(); System.out.println(localZoneId); // Europe/Berlin ZoneRules localRules = localZoneId.getRules(); System.out.println("local rules = " + localRules); ZoneOffset zo = localRules.getOffset(Instant.now()); System.out.println("curr offset = " + zo ); ZoneOffset zostandard = localRules.getStandardOffset(Instant.now()); System.out.println("standard = " + zostandard ); // Winterzeit ist Standard
Ausgabe
Europe/Berlin local rules = ZoneRules[currentStandardOffset=+01:00] curr offset = +02:00 standard = +01:00
Ein ZoneOffset enthält keine Information über die ZoneId
// ZoneOffset -> ZoneRule // statische of(ZoneOffset offset) System.out.println("no zone id"); ZoneOffset zo2 = ZoneOffset.ofHours(5); ZoneRules rules = ZoneRules.of(zo2); System.out.println("rules = " + rules); System.out.println("offset = " + zo2 ); System.out.println("--------------------------------------");
Ausgabe
no zone id rules = ZoneRules[currentStandardOffset=+05:00] offset = +05:00
Da im vorliegenden Fall der ZoneOffset aus ZonedDateTime gebildet wird enthalten die ZoneRules die Zoneninformation von "America/New_York".
ZoneId newyork = ZoneId.of("America/New_York"); System.out.println(newyork); // America/New_York ZonedDateTime zdt2 = ZonedDateTime.now(newyork); ZoneOffset zo3 = ZoneOffset.from(zdt2); ZoneRules rules2 = ZoneRules.of(zo3); System.out.println("new york rules = " + rules2); System.out.println("new york offset = " + zo3);
Ausgabe
America/New_York new york rules = ZoneRules[currentStandardOffset=-04:00] new york offset = -04:00
Aus den ZoneRules bekommt man die Transitionrules, also die Regeln wann in welcher Zeitzone die Sommerzeit auf die Winterzeit wechselt, wenn es in dieser Zeitzone einen solchen Wechsel gibt. Hier fünf Beispiele dazu.
ZoneId localZoneId = ZoneId.systemDefault(); System.out.println(localZoneId); // Europe/Berlin ZoneRules localRules = localZoneId.getRules(); System.out.println("offset = " + localRules.getOffset(Instant.now()) ); ListzotrList = localRules.getTransitionRules(); System.out.println(zotrList.size()); // 2 System.out.println(zotrList); // TransitionRule[Gap +01:00 to +02:00, SUNDAY on or after MARCH 25 at 01:00 UTC, standard offset +01:00] // TransitionRule[Overlap +02:00 to +01:00, SUNDAY on or after OCTOBER 25 at 01:00 UTC, standard offset +01:00]
Ausgabe
Europe/Berlin offset = +02:00 2 TransitionRule[Gap +01:00 to +02:00, SUNDAY on or after MARCH 25 at 01:00 UTC, standard offset +01:00] TransitionRule[Overlap +02:00 to +01:00, SUNDAY on or after OCTOBER 25 at 01:00 UTC, standard offset +01:00]
ZoneId java = ZoneId.of("Asia/Jakarta"); System.out.println(java); // ZoneRules javaRules = java.getRules(); System.out.println("offset = " + javaRules.getOffset(Instant.now()) ); ListzotrList2 = javaRules.getTransitionRules(); System.out.println(zotrList2.size()); // 2 System.out.println(zotrList2); System.out.println("------------------------------------------------"); // 0 [] bedeutet: immer der gleiche Offset zu UTC während des gazen Jahres
Ausgabe
Asia/Jakarta offset = +07:00 0 []
ZoneId angel = ZoneId.of("America/Los_Angeles"); System.out.println(angel); // ZoneRules angelRules = angel.getRules(); System.out.println("offset = " + angelRules.getOffset(Instant.now()) ); ListzotrList3 = angelRules.getTransitionRules(); System.out.println(zotrList3.size()); // 2 System.out.println(zotrList3); // TransitionRule[Gap -08:00 to -07:00, SUNDAY on or after MARCH 8 at 02:00 WALL, standard offset -08:00], // TransitionRule[Overlap -07:00 to -08:00, SUNDAY on or after NOVEMBER 1 at 02:00 WALL, standard offset -08:00] // Assuming I have a UTC time and a TimeZone ID, how do I calculate wall time //(= UTC time + Timezone offset + daylight savings) in Java knowing that daylight savings change during the year? // WALL = UTC + ZoneOffset + DST
Ausgabe
America/Los_Angeles offset = -07:00 2 TransitionRule[Gap -08:00 to -07:00, SUNDAY on or after MARCH 8 at 02:00 WALL, standard offset -08:00] TransitionRule[Overlap -07:00 to -08:00, SUNDAY on or after NOVEMBER 1 at 02:00 WALL, standard offset -08:00]
ZoneId sydney = ZoneId.of("Australia/Sydney"); System.out.println(sydney); // ZoneRules sydneyRules = sydney.getRules(); System.out.println("offset = " + sydneyRules.getOffset(Instant.now()) ); ListzotrList4 = sydneyRules.getTransitionRules(); System.out.println(zotrList4.size()); // 2 System.out.println(zotrList4); // TransitionRule[Overlap +11:00 to +10:00, SUNDAY on or after APRIL 1 at 02:00 STANDARD, standard offset +10:00], // TransitionRule[Gap +10:00 to +11:00, SUNDAY on or after OCTOBER 1 at 02:00 STANDARD, standard offset +10:00] // STANDARD = UTC + 10 // http://www.timeanddate.com/library/abbreviations/timezones/au/est.html // Brisbane is on AEST all of year 2014
Ausgabe
Australia/Sydney offset = +11:00 2 TransitionRule[Overlap +11:00 to +10:00, SUNDAY on or after APRIL 1 at 02:00 STANDARD, standard offset +10:00] TransitionRule[Gap +10:00 to +11:00, SUNDAY on or after OCTOBER 1 at 02:00 STANDARD, standard offset +10:00]
ZoneId brisbane = ZoneId.of("Australia/Brisbane"); System.out.println(brisbane); // ZoneRules brisbaneRules = brisbane.getRules(); System.out.println("offset = " + brisbaneRules.getOffset(Instant.now()) ); ListzotrList5 = brisbaneRules.getTransitionRules(); System.out.println(zotrList5.size()); // 2 System.out.println(zotrList5); // TransitionRule[Overlap +11:00 to +10:00, SUNDAY on or after APRIL 1 at 02:00 STANDARD, standard offset +10:00], // TransitionRule[Gap +10:00 to +11:00, SUNDAY on or after OCTOBER 1 at 02:00 STANDARD, standard offset +10:00] // STANDARD = UTC + 10 // http://www.timeanddate.com/library/abbreviations/timezones/au/est.html // Brisbane is on AEST all of year 2014 // 0 [] bedeutet: immer der gleiche Offset zu UTC während des gazen Jahres
Ausgabe
Australia/Brisbane offset = +10:00 0 []
Die folgende kleine Methode ermittelt den Offset zu einer gegebenen Zeitzone.
private static ZoneOffset getCurrentOffset(String zoneid) { return ZoneId.of(zoneid).getRules().getOffset(Instant.now()); }
Wegen DST kann der Offset zu einer Zeitzone abhängig vom Datum sein. Hier einige Beispiele.
String martiZone = "America/Martinique"; System.out.println(martiZone); ZoneOffset martiOffset = getCurrentOffset(martiZone); System.out.println(martiOffset); String brisbaneZone = "Australia/Brisbane"; System.out.println(brisbaneZone); ZoneOffset brisbaneOffset = getCurrentOffset("Australia/Brisbane"); System.out.println(brisbaneOffset); String southpoleZone = "Antarctica/South_Pole"; System.out.println(southpoleZone); ZoneOffset southpoleOffset = getCurrentOffset(southpoleZone); System.out.println(southpoleOffset);
Ausgabe
America/Martinique -04:00 Australia/Brisbane +10:00 Antarctica/South_Pole +13:00
Die folgende Methode berechnet die Differenz zweieer Zeitzonen.
private static int differenz_zweier_zeitzonen(String zone1, String zone2) { ZoneId id1 = ZoneId.of(zone1); ZoneId id2 = ZoneId.of(zone2); return (id1.getRules().getOffset(Instant.now()).getTotalSeconds() - id2.getRules().getOffset(Instant.now()).getTotalSeconds())/3600; }
Ein Beispiel
String zone1 = "Europe/Berlin"; String zone2 = "America/New_York"; System.out.print("Zeitdifferenz zwischen " + zone1 + " und " + zone2 + ": "); int diff = differenz_zweier_zeitzonen(zone2, zone1); System.out.println(diff + " Stunden");
Ausgabe
Zeitdifferenz zwischen Europe/Berlin und America/New_York: -6 Stunden
Die folgende kleine Methode liefert alle Zeitzonen zu einem vorgegebenen Offset und zum aktuellen Datum.
private static Setzonen_zum_offset(int offHours) { Set ids = ZoneId.getAvailableZoneIds(); TreeSet zones = new TreeSet<>(); for(String id: ids) { ZoneOffset zo = ZoneId.of(id).getRules().getOffset(Instant.now()); if (zo.getTotalSeconds() == offHours*3600) { zones.add(id); } } return zones; }
Einige Ergebnisse (Europe/Berlin October 2014 vor der Umstellung auf Winterzeit)
Offset +2
Africa/Blantyre Africa/Bujumbura Africa/Cairo Africa/Ceuta Africa/Gaborone Africa/Harare Africa/Johannesburg Africa/Kigali Africa/Lubumbashi Africa/Lusaka Africa/Maputo Africa/Maseru Africa/Mbabane Africa/Tripoli Africa/Windhoek Antarctica/Troll Arctic/Longyearbyen Asia/Gaza Asia/Hebron Atlantic/Jan_Mayen CET Egypt Etc/GMT-2 Europe/Amsterdam Europe/Andorra Europe/Belgrade Europe/Berlin Europe/Bratislava Europe/Brussels Europe/Budapest Europe/Busingen Europe/Copenhagen Europe/Gibraltar Europe/Ljubljana Europe/Luxembourg Europe/Madrid Europe/Malta Europe/Monaco Europe/Oslo Europe/Paris Europe/Podgorica Europe/Prague Europe/Rome Europe/San_Marino Europe/Sarajevo Europe/Skopje Europe/Stockholm Europe/Tirane Europe/Vaduz Europe/Vatican Europe/Vienna Europe/Warsaw Europe/Zagreb Europe/Zurich Libya MET Poland
Offset +7
Antarctica/Davis Asia/Bangkok Asia/Ho_Chi_Minh Asia/Hovd Asia/Jakarta Asia/Novokuznetsk Asia/Novosibirsk Asia/Omsk Asia/Phnom_Penh Asia/Pontianak Asia/Saigon Asia/Vientiane Etc/GMT-7 Indian/Christmas
Alle Zeitzonen bekommt man sortiert mit der nachfolgenden einfachen Methode.
private static void alleZoneIds() { Set<String> zoneIds = ZoneId.getAvailableZoneIds(); TreeSet<String> ts = new TreeSet<String>(zoneIds); for(String zone: ts) System.out.println(zone); }
Die Tabelle wird nach und nach vervollständigt.
Zeitzonen | |
---|---|
Africa | |
Africa/Abidjan [+00:00] Africa/Accra [+00:00] Africa/Addis_Ababa [+03:00] Africa/Algiers [+01:00] Africa/Asmara [+03:00] Africa/Asmera [+03:00] Africa/Bamako [+00:00] Africa/Bangui [+01:00] Africa/Banjul [+00:00] Africa/Bissau [+00:00] Africa/Blantyre [+02:00] Africa/Brazzaville [+01:00] Africa/Bujumbura [+02:00] Africa/Cairo [+02:00] Africa/Casablanca [+00:00] Africa/Ceuta [+02:00] [+01:00] Africa/Conakry [+00:00] Africa/Dakar [+00:00] Africa/Dar_es_Salaam [+03:00] Africa/Djibouti [+03:00] Africa/Douala [+01:00] Africa/El_Aaiun [+00:00] Africa/Freetown [+00:00] Africa/Gaborone [+02:00] Africa/Harare [+02:00] Africa/Johannesburg [+02:00] Africa/Juba [+03:00] Africa/Kampala [+03:00] Africa/Khartoum [+03:00] Africa/Kigali [+02:00] Africa/Kinshasa [+01:00] Africa/Lagos [+01:00] Africa/Libreville [+01:00] Africa/Lome [+00:00] Africa/Luanda [+01:00] Africa/Lubumbashi [+02:00] Africa/Lusaka [+02:00] Africa/Malabo [+01:00] Africa/Maputo [+02:00] Africa/Maseru [+02:00] Africa/Mbabane [+02:00] Africa/Mogadishu [+03:00] Africa/Monrovia [+00:00] Africa/Nairobi [+03:00] Africa/Ndjamena [+01:00] Africa/Niamey [+01:00] Africa/Nouakchott [+00:00] Africa/Ouagadougou [+00:00] Africa/Porto-Novo [+01:00] Africa/Sao_Tome [+00:00] Africa/Timbuktu [+00:00] Africa/Tripoli [+02:00] Africa/Tunis [+01:00] Africa/Windhoek [+01:00] [+02:00] | |
America | |
America/Adak [-09:00] [-10:00]
America/Anchorage [-08:00] [-09:00]
America/Anguilla [-04:00]
America/Antigua [-04:00]
America/Araguaina [-03:00]
|
|
Antarctica | |
Antarctica/Casey [+08:00] Antarctica/Davis [+07:00] Antarctica/DumontDUrville [+10:00] Antarctica/Macquarie [+11:00] Antarctica/Mawson [+05:00] Antarctica/McMurdo [+12:00] [+13:00] Antarctica/Palmer [-04:00] [-03:00] Antarctica/Rothera [-03:00] Antarctica/South_Pole [+12:00] [+13:00] Antarctica/Syowa [+03:00] Antarctica/Troll [+02:00] [+00:00] Antarctica/Vostok [+06:00] | |
Arctic | |
Arctic/Longyearbyen [+02:00] [+01:00] | |
Asia | |
Asia/Aden [+03:00] Asia/Almaty [+06:00] Asia/Amman [+03:00] [+02:00] Asia/Anadyr [+12:00] Asia/Aqtau [+05:00] Asia/Aqtobe [+05:00] Asia/Ashgabat [+05:00] Asia/Ashkhabad [+05:00] Asia/Baghdad [+03:00] Asia/Bahrain [+03:00] Asia/Baku [+04:00] Asia/Bangkok [+07:00] Asia/Barnaul [+07:00] Asia/Beirut [+03:00] [+02:00] Asia/Bishkek [+06:00] Asia/Brunei [+08:00] Asia/Calcutta [+05:30] Asia/Chita [+09:00] Asia/Choibalsan [+09:00] [+08:00] Asia/Chongqing [+08:00] Asia/Chungking [+08:00] Asia/Colombo [+05:30] Asia/Dacca [+06:00] Asia/Damascus [+03:00] [+02:00] Asia/Dhaka [+06:00] Asia/Dili [+09:00] Asia/Dubai [+04:00] Asia/Dushanbe [+05:00] Asia/Gaza [+03:00] [+02:00] Asia/Harbin [+08:00] Asia/Hebron [+03:00] [+02:00] Asia/Ho_Chi_Minh [+07:00] Asia/Hong_Kong [+08:00] Asia/Hovd [+08:00] [+07:00] Asia/Irkutsk [+08:00] Asia/Istanbul [+03:00] [+02:00] Asia/Jakarta [+07:00] Asia/Jayapura [+09:00] Asia/Jerusalem [+03:00] [+02:00] Asia/Kabul [+04:30] Asia/Kamchatka [+12:00] Asia/Karachi [+05:00] Asia/Kashgar [+06:00] Asia/Kathmandu [+05:45] Asia/Katmandu [+05:45] Asia/Khandyga [+09:00] Asia/Kolkata [+05:30] Asia/Krasnoyarsk [+07:00] Asia/Kuala_Lumpur [+08:00] Asia/Kuching [+08:00] Asia/Kuwait [+03:00] Asia/Macao [+08:00] Asia/Macau [+08:00] Asia/Magadan [+11:00] Asia/Makassar [+08:00] Asia/Manila [+08:00] Asia/Muscat [+04:00] Asia/Nicosia [+03:00] [+02:00] Asia/Novokuznetsk [+07:00] Asia/Novosibirsk [+06:00] Asia/Omsk [+06:00] Asia/Oral [+05:00] Asia/Phnom_Penh [+07:00] Asia/Pontianak [+07:00] Asia/Pyongyang [+08:30] Asia/Qatar [+03:00] Asia/Qyzylorda [+06:00] Asia/Rangoon [+06:30] Asia/Riyadh [+03:00] Asia/Saigon [+07:00] Asia/Sakhalin [+11:00] Asia/Samarkand [+05:00] Asia/Seoul [+09:00] Asia/Shanghai [+08:00] Asia/Singapore [+08:00] Asia/Srednekolymsk [+11:00] Asia/Taipei [+08:00] Asia/Tashkent [+05:00] Asia/Tbilisi [+04:00] Asia/Tehran [+04:30] [+03:30] Asia/Tel_Aviv [+03:00] [+02:00] Asia/Thimbu [+06:00] Asia/Thimphu [+06:00] Asia/Tokyo [+09:00] Asia/Tomsk [+07:00] Asia/Ujung_Pandang [+08:00] Asia/Ulaanbaatar [+09:00] [+08:00] Asia/Ulan_Bator [+09:00] [+08:00] Asia/Urumqi [+06:00] Asia/Ust-Nera [+10:00] Asia/Vientiane [+07:00] Asia/Vladivostok [+10:00] Asia/Yakutsk [+09:00] Asia/Yekaterinburg [+05:00] Asia/Yerevan [+04:00] | |
Atlantic | |
Atlantic/Azores [+00:00] [-01:00] Atlantic/Bermuda [-03:00] [-04:00] Atlantic/Canary [+01:00] [+00:00] Atlantic/Cape_Verde [-01:00] Atlantic/Faeroe [+01:00] [+00:00] Atlantic/Faroe [+01:00] [+00:00] Atlantic/Jan_Mayen [+02:00] [+01:00] Atlantic/Madeira [+01:00] [+00:00] Atlantic/Reykjavik [+00:00] Atlantic/South_Georgia [-02:00] Atlantic/St_Helena [+00:00] Atlantic/Stanley [-03:00] | |
Australia | |
Australia/ACT [+10:00] [+11:00] Australia/Adelaide [+09:30] [+10:30] Australia/Brisbane [+10:00] Australia/Broken_Hill [+09:30] [+10:30] Australia/Canberra [+10:00] [+11:00] Australia/Currie [+10:00] [+11:00] Australia/Darwin [+09:30] Australia/Eucla [+08:45] Australia/Hobart [+10:00] [+11:00] Australia/LHI [+10:30] [+11:00] Australia/Lindeman [+10:00] Australia/Lord_Howe [+10:30] [+11:00] Australia/Melbourne [+10:00] [+11:00] Australia/NSW [+10:00] [+11:00] Australia/North [+09:30] Australia/Perth [+08:00] Australia/Queensland [+10:00] Australia/South [+09:30] [+10:30] Australia/Sydney [+10:00] [+11:00] Australia/Tasmania [+10:00] [+11:00] Australia/Victoria [+10:00] [+11:00] Australia/West [+08:00] Australia/Yancowinna [+09:30] [+10:30] | |
Brazil | |
Brazil/Acre [-05:00] Brazil/DeNoronha [-02:00] Brazil/East [-03:00] [-02:00] Brazil/West [-04:00] | |
CET | |
CET [+02:00] [+01:00] | |
CST6CDT | |
CST6CDT [-05:00] [-06:00] | |
Canada | |
Canada/Atlantic [-03:00] [-04:00] Canada/Central [-05:00] [-06:00] Canada/East-Saskatchewan [-06:00] Canada/Eastern [-04:00] [-05:00] Canada/Mountain [-06:00] [-07:00] Canada/Newfoundland [-02:30] [-03:30] Canada/Pacific [-07:00] [-08:00] Canada/Saskatchewan [-06:00] Canada/Yukon [-07:00] [-08:00] | |
Chile | |
Chile/Continental [-04:00] [-03:00] Chile/EasterIsland [-06:00] [-05:00] | |
Cuba | |
Cuba [-04:00] [-05:00] | |
EET | |
EET [+03:00] [+02:00] | |
EST5EDT | |
EST5EDT [-04:00] [-05:00] | |
Egypt | |
Egypt [+02:00] | |
Eire | |
Eire [+01:00] [+00:00] | |
Etc | |
Etc/GMT [+00:00] Etc/GMT+0 [+00:00] Etc/GMT+1 [-01:00] Etc/GMT+10 [-10:00] Etc/GMT+11 [-11:00] Etc/GMT+12 [-12:00] Etc/GMT+2 [-02:00] Etc/GMT+3 [-03:00] Etc/GMT+4 [-04:00] Etc/GMT+5 [-05:00] Etc/GMT+6 [-06:00] Etc/GMT+7 [-07:00] Etc/GMT+8 [-08:00] Etc/GMT+9 [-09:00] Etc/GMT-0 [+00:00] Etc/GMT-1 [+01:00] Etc/GMT-10 [+10:00] Etc/GMT-11 [+11:00] Etc/GMT-12 [+12:00] Etc/GMT-13 [+13:00] Etc/GMT-14 [+14:00] Etc/GMT-2 [+02:00] Etc/GMT-3 [+03:00] Etc/GMT-4 [+04:00] Etc/GMT-5 [+05:00] Etc/GMT-6 [+06:00] Etc/GMT-7 [+07:00] Etc/GMT-8 [+08:00] Etc/GMT-9 [+09:00] Etc/GMT0 [+00:00] Etc/Greenwich [+00:00] Etc/UCT [+00:00] Etc/UTC [+00:00] Etc/Universal [+00:00] Etc/Zulu [+00:00] | |
Europe | |
Europe/Amsterdam [+02:00] Europe/Andorra [+02:00] Europe/Astrakhan [+04:00] Europe/Athens [+03:00] Europe/Belfast [+01:00] Europe/Belgrade [+02:00] Europe/Berlin [+02:00] Europe/Bratislava [+02:00] Europe/Brussels [+02:00] Europe/Bucharest [+03:00] Europe/Budapest [+02:00] Europe/Busingen [+02:00] Europe/Chisinau [+03:00] Europe/Copenhagen [+02:00] Europe/Dublin [+01:00] Europe/Gibraltar [+02:00] Europe/Guernsey [+01:00] Europe/Helsinki [+03:00] Europe/Isle_of_Man [+01:00] Europe/Istanbul [+03:00] Europe/Jersey [+01:00] Europe/Kaliningrad [+02:00] Europe/Kiev [+03:00] Europe/Kirov [+03:00] Europe/Lisbon [+01:00] Europe/Ljubljana [+02:00] Europe/London [+01:00] Europe/Luxembourg [+02:00] Europe/Madrid [+02:00] Europe/Malta [+02:00] Europe/Mariehamn [+03:00] Europe/Minsk [+03:00] Europe/Monaco [+02:00] Europe/Moscow [+03:00] Europe/Nicosia [+03:00] Europe/Oslo [+02:00] Europe/Paris [+02:00] Europe/Podgorica [+02:00] Europe/Prague [+02:00] Europe/Riga [+03:00] Europe/Rome [+02:00] Europe/Samara [+04:00] Europe/San_Marino [+02:00] Europe/Sarajevo [+02:00] Europe/Simferopol [+03:00] Europe/Skopje [+02:00] Europe/Sofia [+03:00] Europe/Stockholm [+02:00] Europe/Tallinn [+03:00] Europe/Tirane [+02:00] Europe/Tiraspol [+03:00] Europe/Ulyanovsk [+04:00] Europe/Uzhgorod [+03:00] Europe/Vaduz [+02:00] Europe/Vatican [+02:00] Europe/Vienna [+02:00] Europe/Vilnius [+03:00] Europe/Volgograd [+03:00] Europe/Warsaw [+02:00] Europe/Zagreb [+02:00] Europe/Zaporozhye [+03:00] Europe/Zurich [+02:00] | |
GB | |
GB [+01:00] [+00:00] | |
GB-Eire | |
GB-Eire [+01:00] [+00:00] | |
GMT | |
GMT [+00:00] | |
GMT0 | |
GMT0 [+00:00] | |
Greenwich | |
Greenwich [+00:00] | |
Hongkong | |
Hongkong [+08:00] | |
Iceland | |
Iceland [+00:00] | |
Indian | |
Indian/Antananarivo [+03:00] Indian/Chagos [+06:00] Indian/Christmas [+07:00] Indian/Cocos [+06:30] Indian/Comoro [+03:00] Indian/Kerguelen [+05:00] Indian/Mahe [+04:00] Indian/Maldives [+05:00] Indian/Mauritius [+04:00] Indian/Mayotte [+03:00] Indian/Reunion [+04:00] | |
xxx | |
xxx | |
xxx | |
xxx | |
xxx | |