Как получить код страны из идентификатора часового пояса в Java?

 String zoneId = Calendar.getInstance().getTimeZone().toZoneId();

Я хочу получить String [] с кодом ISO страны, например «AS», «AL», «AU», для которых применяется zoneId?

Имеет ли это смысл? Есть больше стран для одного часового пояса ... см. Javadocs для ZoneIds: docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html

Paolof76 22.03.2018 08:06

Он не компилируется, поскольку toZoneId() возвращает ZoneId (не String; но вы можете добавить .toString(), чтобы он был). @ Paolof76: имеет смысл, если идентификатор зоны находится в формате региона / города, например Pacific / Honolulu, как и должно быть. Но боюсь, что для этого потребуется база данных по географии.

Ole V.V. 22.03.2018 11:33

Есть ли какой-либо сторонний API или что-то, что преобразует формат «регион / город» в соответствующий ISO-код страны или название страны.

SABER - FICTIONAL CHARACTER 22.03.2018 12:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
3
2 639
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что лучшая альтернатива - получить эти файлы IANA:

Эти файлы имеют записи в следующем формате:

#codes  coordinates TZ  comments
AD      +4230+00131 Europe/Andorra
AE,OM   +2518+05518 Asia/Dubai
AF      +3431+06912 Asia/Kabul

Если я не ошибаюсь, zone1970.tab новее и охватывает случаи, когда часовой пояс используется более чем в одной стране, но вы можете проверить оба и посмотреть, какой из них решает вашу проблему.

И есть также файл iso3166.tab, который сопоставляет коды стран с их соответствующими названиями.

Я не уверен, есть ли у Java API, который напрямую читает эти файлы, но, глядя на их форматы, кажется, что их легко прочитать и найти нужную информацию.


Быстрая заметка: звонить в Calendar.getInstance().getTimeZone().toZoneId() не нужно.

Если вы хотите, чтобы часовой пояс JVM по умолчанию был объектом ZoneId, просто вызовите ZoneId.systemDefault(). Если вы хотите, чтобы идентификатор зоны был String (например, Europe/Berlin или America/New_York), просто позвоните в ZoneId.systemDefault().getId().

Другие вопросы по теме