Узнайте о доступных идентификаторах зон и смещениях зон в Java 8 или более поздней версии. Эти идентификаторы зон и смещения представляют собой момент/временную метку, которая является локальной для указанного часового пояса.
1. Использование ZoneId и ZoneOffset
В Java 8 представлены новые API даты и времени(JSR-310), включая ZoneId и ZoneOffset.
- ZoneId указывает идентификатор часового пояса и предоставляет правила преобразования между Instant и LocalDateTime.
- ZoneOffset указывает смещение часового пояса относительно Гринвича/UTC.
В Java наиболее подходящим представлением em в зоне является экземпляр класса ZonedDateTime. Мы можем создать его экземпляры следующим образом:
ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Kolkata"));//orZonedDateTime zdt = ZonedDateTime.now(ZoneOffset.of("+05:30"));//orZonedDateTime zdt = ZonedDateTime.now(ZoneId.of(ZoneId.SHORT_IDS.get("IST")));
Мы можем преобразовать локальные временные метки(в зоне по умолчанию) во временные метки в указанной зоне, используя эти классы следующим образом:
LocalDateTime ldt = LocalDateTime.now();ZonedDateTime zdt = ldt.atZone(ZoneOffset.of("+05:30"));//orLocalDateTime ldt = LocalDateTime.now();ZonedDateTime zdt = ldt.atZone(ZoneId.of("Asia/Kolkata"));
Итак, чтобы использовать API даты и времени в приложении, доступном в нескольких зонах, нам нужно знать точное значение идентификатора зоны или смещения. В следующем разделе перечислены все поддерживаемые идентификаторы зон и смещения в Java.
2. Часто используемые идентификаторы зон и смещения
В следующей таблице перечислены часто используемые идентификаторы зон и их смещения:
Краткое имя | Зона ID | Смещение зоны |
---|---|---|
время по Гринвичу | время по Гринвичу | +00:00 |
UTC или UT | универсальное глобальное время | +00:00 |
EST или ET | Америка/Нью_Йорк | -05:00 |
КСТ | Америка/Чикаго | -06:00 |
Тихоокеанское стандартное время | Америка/Лос-Анджелес | -08:00 |
ИСТ | Азия/Калькутта | +05:30 |
EST, CST и PST поддерживают правила перехода на летнее время(DST), поэтому рекомендуется использовать ZoneId для получения локализованной временной метки в часовом поясе. Правильное смещение автоматически применяется к временным меткам на основе правил DST.
См. также: Преобразование даты в часовой пояс EST/EDT
3. Поддерживаемые Java идентификаторы зон и смещения
Самый простой способ найти все идентификаторы зон в Java — использовать методы ZoneId.getAvailableZoneIds(), которые возвращают набор всех доступных идентификаторов зон на основе регионов.
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
Мы можем выполнить итерацию и вывести все идентификаторы зон для справки. Давайте сделаем шаг вперед в этом примере. Мы выведем все идентификаторы зон и их смещения для справки.
Следующая программа Java перебирает все идентификаторы зон и собирает сопоставления идентификаторов зон и смещений в LinkedHashMap. Мы используем LinkedHashMap для поддержания порядка сопоставлений, добавленных после сортировки сопоставлений по значениям смещения зон с помощью Map.Entry.comparingByValue().reversed() Comparator.
Instant instant = Instant.now();Map<String, String> result = ZoneId.getAvailableZoneIds().stream().map(ZoneId::of).map(zoneId -> new SimpleEntry<>(zoneId.toString(), instant.atZone(zoneId).getOffset().getId().replaceAll("Z", "+00:00"))).sorted(Map.Entry.<String, String>comparingByValue().reversed()).collect(Collectors.toMap(SimpleEntry::getKey,SimpleEntry::getValue,(oldValue, newValue) -> oldValue,LinkedHashMap::new));result.forEach((k, v) -> System.out.printf(String.format("%35s %s %n", k, v)));System.out.println("\nNumber of Zone IDs " + result.size());
Программа выводит все 601 идентификаторов зон и смещений. Мы можем использовать эту информацию для быстрого обращения к поддерживаемым часовым поясам в Java.
Etc/GMT+12 -12:00Pacific/Pago_Pago -11:00Pacific/Samoa -11:00Pacific/Niue -11:00US/Samoa -11:00Etc/GMT+11 -11:00Pacific/Midway -11:00Pacific/Honolulu -10:00Pacific/Rarotonga -10:00Pacific/Tahiti -10:00Pacific/Johnston -10:00America/Atka -10:00US/Hawaii -10:00SystemV/HST10 -10:00America/Adak -10:00US/Aleutian -10:00Etc/GMT+10 -10:00Pacific/Marquesas -09:30Etc/GMT+9 -09:00US/Alaska -09:00America/Juneau -09:00America/Metlakatla -09:00Pacific/Gambier -09:00America/Yakutat -09:00America/Sitka -09:00SystemV/YST9 -09:00America/Anchorage -09:00America/Nome -09:00SystemV/YST9YDT -09:00Etc/GMT+8 -08:00Canada/Pacific -08:00PST8PDT -08:00Pacific/Pitcairn -08:00Mexico/BajaNorte -08:00America/Tijuana -08:00SystemV/PST8 -08:00America/Santa_Isabel -08:00America/Vancouver -08:00America/Ensenada -08:00SystemV/PST8PDT -08:00America/Los_Angeles -08:00US/Pacific -08:00Canada/Yukon -07:00Etc/GMT+7 -07:00US/Arizona -07:00Mexico/BajaSur -07:00America/Dawson_Creek -07:00America/Denver -07:00America/Yellowknife -07:00America/Inuvik -07:00America/Mazatlan -07:00SystemV/MST7 -07:00America/Boise -07:00America/Dawson -07:00MST7MDT -07:00America/Chihuahua -07:00America/Ojinaga -07:00US/Mountain -07:00America/Creston -07:00America/Edmonton -07:00America/Hermosillo -07:00Canada/Mountain -07:00America/Cambridge_Bay -07:00Navajo -07:00America/Phoenix -07:00America/Whitehorse -07:00SystemV/MST7MDT -07:00America/Fort_Nelson -07:00America/Shiprock -07:00America/El_Salvador -06:00America/Guatemala -06:00America/Belize -06:00America/Managua -06:00America/Chicago -06:00America/Tegucigalpa -06:00Etc/GMT+6 -06:00America/Regina -06:00Mexico/General -06:00America/Rankin_Inlet -06:00US/Central -06:00Pacific/Galapagos -06:00America/Rainy_River -06:00America/Swift_Current -06:00America/Costa_Rica -06:00America/Indiana/Knox -06:00America/North_Dakota/Beulah -06:00America/Monterrey -06:00SystemV/CST6 -06:00America/North_Dakota/Center -06:00America/Indiana/Tell_City -06:00America/Mexico_City -06:00America/Matamoros -06:00CST6CDT -06:00America/Knox_IN -06:00America/Menominee -06:00America/Resolute -06:00Canada/Central -06:00America/Bahia_Banderas -06:00US/Indiana-Starke -06:00SystemV/CST6CDT -06:00America/Merida -06:00Canada/Saskatchewan -06:00America/North_Dakota/New_Salem -06:00America/Winnipeg -06:00America/Panama -05:00America/Indiana/Petersburg -05:00America/Eirunepe -05:00America/Grand_Turk -05:00Cuba -05:00Etc/GMT+5 -05:00Pacific/Easter -05:00America/Fort_Wayne -05:00America/Havana -05:00America/Porto_Acre -05:00US/Michigan -05:00America/Louisville -05:00America/Guayaquil -05:00America/Indiana/Vevay -05:00America/Indiana/Vincennes -05:00America/Indianapolis -05:00America/Iqaluit -05:00America/Kentucky/Louisville -05:00EST5EDT -05:00America/Nassau -05:00America/Jamaica -05:00America/Atikokan -05:00America/Kentucky/Monticello -05:00America/Coral_Harbour -05:00America/Cayman -05:00Chile/EasterIsland -05:00America/Indiana/Indianapolis -05:00America/Thunder_Bay -05:00America/Indiana/Marengo -05:00America/Bogota -05:00SystemV/EST5 -05:00US/Eastern -05:00Canada/Eastern -05:00America/Port-au-Prince -05:00America/Nipigon -05:00Brazil/Acre -05:00US/East-Indiana -05:00America/Cancun -05:00America/Lima -05:00America/Rio_Branco -05:00America/Detroit -05:00Jamaica -05:00America/Pangnirtung -05:00America/Montreal -05:00America/Indiana/Winamac -05:00America/New_York -05:00America/Toronto -05:00SystemV/EST5EDT -05:00America/Cuiaba -04:00America/Marigot -04:00Canada/Atlantic -04:00Etc/GMT+4 -04:00America/Manaus -04:00America/St_Thomas -04:00America/Anguilla -04:00America/Barbados -04:00America/Curacao -04:00America/Guyana -04:00America/Martinique -04:00America/Puerto_Rico -04:00America/Port_of_Spain -04:00SystemV/AST4 -04:00America/Kralendijk -04:00America/Antigua -04:00America/Moncton -04:00America/St_Vincent -04:00America/Dominica -04:00Atlantic/Bermuda -04:00Brazil/West -04:00America/Aruba -04:00America/Halifax -04:00America/La_Paz -04:00America/Blanc-Sablon -04:00America/Santo_Domingo -04:00America/Glace_Bay -04:00America/St_Barthelemy -04:00America/St_Lucia -04:00America/Montserrat -04:00America/Lower_Princes -04:00America/Thule -04:00America/Tortola -04:00America/Porto_Velho -04:00America/Campo_Grande -04:00America/Goose_Bay -04:00America/Virgin -04:00America/Boa_Vista -04:00America/Grenada -04:00America/St_Kitts -04:00America/Caracas -04:00America/Guadeloupe -04:00SystemV/AST4ADT -04:00America/St_Johns -03:30Canada/Newfoundland -03:30Chile/Continental -03:00America/Miquelon -03:00America/Argentina/Catamarca -03:00America/Argentina/Cordoba -03:00America/Araguaina -03:00America/Argentina/Salta -03:00Etc/GMT+3 -03:00America/Montevideo -03:00Brazil/East -03:00America/Argentina/Mendoza -03:00America/Argentina/Rio_Gallegos -03:00America/Catamarca -03:00America/Godthab -03:00America/Cordoba -03:00America/Sao_Paulo -03:00America/Argentina/Jujuy -03:00America/Cayenne -03:00America/Recife -03:00America/Buenos_Aires -03:00America/Paramaribo -03:00America/Mendoza -03:00America/Santarem -03:00America/Asuncion -03:00America/Maceio -03:00Atlantic/Stanley -03:00Antarctica/Rothera -03:00America/Argentina/San_Luis -03:00America/Santiago -03:00America/Argentina/Ushuaia -03:00Antarctica/Palmer -03:00America/Punta_Arenas -03:00America/Fortaleza -03:00America/Argentina/La_Rioja -03:00America/Belem -03:00America/Jujuy -03:00America/Bahia -03:00America/Argentina/San_Juan -03:00America/Argentina/ComodRivadavia -03:00America/Argentina/Tucuman -03:00America/Nuuk -03:00America/Rosario -03:00America/Argentina/Buenos_Aires -03:00Etc/GMT+2 -02:00America/Noronha -02:00Brazil/DeNoronha -02:00Atlantic/South_Georgia -02:00Etc/GMT+1 -01:00Atlantic/Cape_Verde -01:00Atlantic/Azores -01:00America/Scoresbysund -01:00Pacific/Kiritimati +14:00Etc/GMT-14 +14:00NZ-CHAT +13:45Pacific/Chatham +13:45Pacific/Fakaofo +13:00Antarctica/McMurdo +13:00Pacific/Enderbury +13:00NZ +13:00Pacific/Apia +13:00Antarctica/South_Pole +13:00Pacific/Kanton +13:00Pacific/Auckland +13:00Pacific/Tongatapu +13:00Etc/GMT-13 +13:00Pacific/Kwajalein +12:00Pacific/Wallis +12:00Pacific/Fiji +12:00Pacific/Funafuti +12:00Pacific/Nauru +12:00Kwajalein +12:00Pacific/Wake +12:00Pacific/Norfolk +12:00Pacific/Tarawa +12:00Asia/Kamchatka +12:00Etc/GMT-12 +12:00Asia/Anadyr +12:00Pacific/Majuro +12:00Australia/Hobart +11:00Australia/Tasmania +11:00Australia/ACT +11:00Pacific/Ponape +11:00Pacific/Bougainville +11:00Australia/Victoria +11:00Antarctica/Macquarie +11:00Antarctica/Casey +11:00Australia/Canberra +11:00Australia/Currie +11:00Australia/Lord_Howe +11:00Australia/NSW +11:00Pacific/Pohnpei +11:00Pacific/Efate +11:00Asia/Magadan +11:00Pacific/Kosrae +11:00Australia/Sydney +11:00Australia/LHI +11:00Asia/Sakhalin +11:00Pacific/Noumea +11:00Etc/GMT-11 +11:00Asia/Srednekolymsk +11:00Australia/Melbourne +11:00Pacific/Guadalcanal +11:00Australia/Yancowinna +10:30Australia/Adelaide +10:30Australia/Broken_Hill +10:30Australia/South +10:30Pacific/Yap +10:00Pacific/Port_Moresby +10:00Pacific/Chuuk +10:00Australia/Queensland +10:00Pacific/Guam +10:00Pacific/Truk +10:00Asia/Vladivostok +10:00Pacific/Saipan +10:00Antarctica/DumontDUrville +10:00Australia/Brisbane +10:00Etc/GMT-10 +10:00Asia/Ust-Nera +10:00Australia/Lindeman +10:00Australia/North +09:30Australia/Darwin +09:30Etc/GMT-9 +09:00Pacific/Palau +09:00Asia/Chita +09:00Asia/Dili +09:00Asia/Jayapura +09:00Asia/Yakutsk +09:00Asia/Pyongyang +09:00ROK +09:00Asia/Seoul +09:00Asia/Khandyga +09:00Japan +09:00Asia/Tokyo +09:00Australia/Eucla +08:45Asia/Kuching +08:00Asia/Chungking +08:00Etc/GMT-8 +08:00Australia/Perth +08:00Asia/Macao +08:00Asia/Macau +08:00Asia/Choibalsan +08:00Asia/Shanghai +08:00Asia/Ulan_Bator +08:00Asia/Chongqing +08:00Asia/Ulaanbaatar +08:00Asia/Taipei +08:00Asia/Manila +08:00PRC +08:00Asia/Ujung_Pandang +08:00Asia/Harbin +08:00Singapore +08:00Asia/Brunei +08:00Australia/West +08:00Asia/Hong_Kong +08:00Asia/Makassar +08:00Hongkong +08:00Asia/Kuala_Lumpur +08:00Asia/Irkutsk +08:00Asia/Singapore +08:00Asia/Pontianak +07:00Etc/GMT-7 +07:00Asia/Phnom_Penh +07:00Asia/Novosibirsk +07:00Antarctica/Davis +07:00Asia/Tomsk +07:00Asia/Jakarta +07:00Asia/Barnaul +07:00Indian/Christmas +07:00Asia/Ho_Chi_Minh +07:00Asia/Hovd +07:00Asia/Bangkok +07:00Asia/Vientiane +07:00Asia/Novokuznetsk +07:00Asia/Krasnoyarsk +07:00Asia/Saigon +07:00Asia/Yangon +06:30Asia/Rangoon +06:30Indian/Cocos +06:30Asia/Kashgar +06:00Etc/GMT-6 +06:00Asia/Almaty +06:00Asia/Dacca +06:00Asia/Omsk +06:00Asia/Dhaka +06:00Indian/Chagos +06:00Asia/Qostanay +06:00Asia/Bishkek +06:00Antarctica/Vostok +06:00Asia/Urumqi +06:00Asia/Thimbu +06:00Asia/Thimphu +06:00Asia/Kathmandu +05:45Asia/Katmandu +05:45Asia/Kolkata +05:30Asia/Colombo +05:30Asia/Calcutta +05:30Asia/Aqtau +05:00Etc/GMT-5 +05:00Asia/Samarkand +05:00Asia/Karachi +05:00Asia/Yekaterinburg +05:00Asia/Dushanbe +05:00Indian/Maldives +05:00Asia/Oral +05:00Asia/Tashkent +05:00Antarctica/Mawson +05:00Asia/Qyzylorda +05:00Asia/Aqtobe +05:00Asia/Ashkhabad +05:00Asia/Ashgabat +05:00Asia/Atyrau +05:00Indian/Kerguelen +05:00Asia/Kabul +04:30Asia/Yerevan +04:00Etc/GMT-4 +04:00Asia/Dubai +04:00Indian/Reunion +04:00Indian/Mauritius +04:00Europe/Saratov +04:00Europe/Samara +04:00Indian/Mahe +04:00Asia/Baku +04:00Asia/Muscat +04:00Europe/Astrakhan +04:00Asia/Tbilisi +04:00Europe/Ulyanovsk +04:00Iran +03:30Asia/Tehran +03:30Asia/Aden +03:00Africa/Nairobi +03:00Europe/Istanbul +03:00Etc/GMT-3 +03:00Indian/Comoro +03:00Antarctica/Syowa +03:00Africa/Mogadishu +03:00Africa/Asmera +03:00Asia/Istanbul +03:00Europe/Moscow +03:00Africa/Djibouti +03:00Europe/Simferopol +03:00Africa/Asmara +03:00Asia/Baghdad +03:00Africa/Dar_es_Salaam +03:00Africa/Addis_Ababa +03:00Asia/Riyadh +03:00Asia/Kuwait +03:00Europe/Kirov +03:00Africa/Kampala +03:00Europe/Minsk +03:00Asia/Qatar +03:00Asia/Bahrain +03:00Indian/Antananarivo +03:00Indian/Mayotte +03:00Europe/Volgograd +03:00Turkey +03:00W-SU +03:00Africa/Cairo +02:00Africa/Mbabane +02:00Etc/GMT-2 +02:00Europe/Zaporozhye +02:00Libya +02:00Africa/Kigali +02:00Africa/Tripoli +02:00Israel +02:00Europe/Kaliningrad +02:00Africa/Windhoek +02:00Europe/Bucharest +02:00Europe/Mariehamn +02:00Africa/Lubumbashi +02:00Europe/Tiraspol +02:00Europe/Chisinau +02:00Europe/Helsinki +02:00Asia/Beirut +02:00Asia/Tel_Aviv +02:00Europe/Sofia +02:00Africa/Gaborone +02:00Asia/Gaza +02:00Europe/Riga +02:00Africa/Maputo +02:00Asia/Damascus +02:00Europe/Uzhgorod +02:00Asia/Jerusalem +02:00Africa/Bujumbura +02:00Europe/Kiev +02:00Europe/Vilnius +02:00Africa/Maseru +02:00Africa/Blantyre +02:00Africa/Lusaka +02:00Africa/Harare +02:00Europe/Tallinn +02:00Africa/Khartoum +02:00Africa/Johannesburg +02:00Africa/Juba +02:00Asia/Nicosia +02:00Asia/Famagusta +02:00EET +02:00Asia/Hebron +02:00Egypt +02:00Asia/Amman +02:00Europe/Nicosia +02:00Europe/Athens +02:00Europe/Brussels +01:00Europe/Warsaw +01:00CET +01:00Etc/GMT-1 +01:00Europe/Luxembourg +01:00Africa/Tunis +01:00Europe/Malta +01:00Europe/Busingen +01:00Africa/Malabo +01:00Europe/Skopje +01:00Europe/Sarajevo +01:00Africa/Lagos +01:00Europe/Rome +01:00Africa/Algiers +01:00Europe/Zurich +01:00Europe/Gibraltar +01:00Europe/Vaduz +01:00Europe/Ljubljana +01:00Europe/Berlin +01:00Europe/Stockholm +01:00Europe/Budapest +01:00Europe/Zagreb +01:00Europe/Paris +01:00Africa/Ndjamena +01:00Africa/Ceuta +01:00Europe/Prague +01:00Europe/Copenhagen +01:00Europe/Vienna +01:00Europe/Tirane +01:00MET +01:00Europe/Amsterdam +01:00Africa/Libreville +01:00Africa/El_Aaiun +01:00Europe/San_Marino +01:00Africa/Douala +01:00Africa/Brazzaville +01:00Africa/Porto-Novo +01:00Poland +01:00Europe/Andorra +01:00Europe/Oslo +01:00Europe/Podgorica +01:00Africa/Casablanca +01:00Africa/Luanda +01:00Atlantic/Jan_Mayen +01:00Africa/Kinshasa +01:00Europe/Madrid +01:00Africa/Bangui +01:00Europe/Belgrade +01:00Africa/Niamey +01:00Europe/Bratislava +01:00Arctic/Longyearbyen +01:00Europe/Vatican +01:00Europe/Monaco +01:00Europe/London +00:00GMT +00:00Etc/GMT-0 +00:00Europe/Jersey +00:00Atlantic/St_Helena +00:00Europe/Guernsey +00:00Europe/Isle_of_Man +00:00Etc/GMT+0 +00:00Africa/Banjul +00:00Etc/GMT +00:00Africa/Freetown +00:00GB-Eire +00:00Africa/Bamako +00:00GB +00:00Africa/Conakry +00:00Portugal +00:00Universal +00:00Africa/Sao_Tome +00:00Africa/Nouakchott +00:00Antarctica/Troll +00:00UTC +00:00Etc/Universal +00:00Atlantic/Faeroe +00:00Africa/Abidjan +00:00Eire +00:00Africa/Accra +00:00Atlantic/Faroe +00:00Etc/UCT +00:00GMT0 +00:00Europe/Dublin +00:00Zulu +00:00Africa/Ouagadougou +00:00Atlantic/Reykjavik +00:00Atlantic/Madeira +00:00Etc/Zulu +00:00Iceland +00:00Europe/Lisbon +00:00Atlantic/Canary +00:00Africa/Lome +00:00Greenwich +00:00Europe/Belfast +00:00Etc/GMT0 +00:00America/Danmarkshavn +00:00Africa/Dakar +00:00Africa/Bissau +00:00WET +00:00Etc/Greenwich +00:00Africa/Timbuktu +00:00UCT +00:00Africa/Monrovia +00:00Etc/UTC +00:00
4. ZoneId.SHORT_IDS
ZoneId.SHORT_IDS — это постоянная карта часто используемых коротких названий часовых поясов. Например, IST используется для индийского стандартного времени, представляя идентификатор зоны «Asia/Kolkata».
Эта карта содержит сопоставление идентификаторов, соответствующее TZDB 2005r и более поздним версиям, где «EST», «MST» и «HST» сопоставляются с идентификаторами, которые не включают летнее время.
По умолчанию поддерживаются следующие короткие идентификаторы.
EST - -05:00HST - -10:00MST - -07:00ACT - Australia/DarwinAET - Australia/SydneyAGT - America/Argentina/Buenos_AiresART - Africa/CairoAST - America/AnchorageBET - America/Sao_PauloBST - Asia/DhakaCAT - Africa/HarareCNT - America/St_JohnsCST - America/ChicagoCTT - Asia/ShanghaiEAT - Africa/Addis_AbabaECT - Europe/ParisIET - America/Indiana/IndianapolisIST - Asia/KolkataJST - Asia/TokyoMIT - Pacific/ApiaNET - Asia/YerevanNST - Pacific/AucklandPLT - Asia/KarachiPNT - America/PhoenixPRT - America/Puerto_RicoPST - America/Los_AngelesSST - Pacific/GuadalcanalVST - Asia/Ho_Chi_Minh
Это статическая карта, поэтому мы можем добавлять больше пользовательских пар «ключ-значение» в зависимости от требований и использовать их в других местах кода приложения.
5. Заключение
В этом коротком руководстве по Java мы узнали об идентификаторах зон и смещениях, а также отобразили все такие идентификаторы зон для справочных целей. Обратите внимание, что список этих идентификаторов зон может со временем увеличиваться с выходом новых версий Java.