2015-03-31 1 views
5

Как получить аббревиатуру часового пояса, например, IST (стандартное время Индии), ET (Восточное время) и все.Как получить аббревиатуру/код страны мобильного часового пояса в android?

Я использовал код ниже, чтобы получить информацию о часовом поясе в андроид,

Вариант 1:

String mobileTimeZone = Calendar.getInstance().getTimeZone() 
        .getDisplayName(false, TimeZone.SHORT); 

Я выбрал другой часовой пояс и выходной сигнал следующим образом,

GMT + 13: 00

GMT + 00: 00

Но когда настройки некоторых часового пояса она дает мне правильный код аббревиатуру как выход, который находится ниже,

EST

А также я попытался следующий код, который дает полное описание часового пояса.

Вариант 2:

String mobileTimeZone = Calendar.getInstance().getTimeZone().getID(); 

Получение ниже выход, который не что иное, как имя зоны:

Pacific/Midway

Pacific/Гонолулу

Америка/Монтевидео

Есть ли список идентификаторов или таблиц со всем часовым поясом, чтобы я мог его сопоставить.

А также необходимо учитывать дневные сбережения.

Помогите мне получить аббревиатуру часового пояса от мобильного телефона android.

+0

[Вы посетили это место] (http://stackoverflow.com/questions/2807197/get-three-letter-short-timezone-name-as-opposed-to-four-letter) – BBdev

+0

Да. Это тоже не полезно. Старая почта говорит, что метод устарел. не получив правильного решения. –

+0

Ваш вопрос дублируется с помощью [Как получить TimeZone с мобильного Android?] (Http://stackoverflow.com/questions/7672597/how-to-get-timezone-from-android-mobile) – li2

ответ

6

О терминологии:

Мы называем строки, как "Америка/Денвер" и т.д. (в формате региона/города) часовых поясов идентификаторы, а не имена. Эти идентификаторы определены в IANA-TZDB. Названия и сокращения часового пояса - совершенно другая концепция. Эти данные обычно имеют свое происхождение в CLDR-файлах (от консорциума Unicode, например here) и соответствуют тому, что большинство людей ожидает в ИХ ЛОКАЛЬНЫХ ВИДАХ. Эти имена сильно локализованы. В общем, нет международного стандарта, ни для идентификаторов, ни для имен. Последние только следуют местным обычаям.

Mapping:

Отображение из часовых поясов идентификаторы кодов стран и наоборот, можно найти в IANA-TZDB.Затем вы можете быстро увидеть, что нет уникального отображения, как вы ожидаете. Примеры:

Европа/Цюрих может быть действительна в Швейцарии, Германии (sic!) И Лихтенштейн.

Или тривиальным:

США имеет более чем один часовой пояс (Америка/Триатлон, Америка/Чикаго, и т.д.)

Ваша надежда получить уникальный часовой пояс аббревиатуры, используя выражение

Calendar.getInstance().getTimeZone().getDisplayName(false, TimeZone.SHORT); 

не является реалистичным. Способ получения сокращений, указанных вами, является правильным. Однако, как вы сами заметили в своем другом SO-post, результаты отличаются от одного устройства Android другим. Основная причина в том, что разные устройства (dalvik vms) часто имеют разные данные для имен часовых поясов (и OpenJDK-Oracle-VM).

Уникальное отображение названий часовых поясов и сокращений в коды стран обычно невозможно. Примеры счетчиков: «IST» может выступать за «Стандартное время Индии» или для часового пояса Израиля. Или: «BST» используется в «Европе/Лондоне» (в летнее время) или в «Pacific/Bougainville» (круглый год).

О переходе на летнее время:

Идентификаторы не чувствителен для перехода на летнее время. Связанные данные могут быть летними или нет, в зависимости от связанного времени. Названия и сокращения часовых поясов часто (не всегда) чувствительны, например, «PST» или «PDT» в США.

Резюме и рекомендации:

Не используйте имена часовой пояс или аббревиатуры для любых других целей, чем для отображения. Вы не должны использовать эти локализованные данные для любых выводов или целей хранения.

+0

@ Meno ... Спасибо за ваши полные описательные ответы ... Ясное и аккуратное. Я подумал о том, чтобы просто отображать пользовательский часовой пояс в пользовательском интерфейсе, выполнив сопоставление по собственному. Как вы предположили, нам не нужно делать сопоставление самим собой, потому что сам IST имеет различный смысл. Таким образом, мы удалили эту функцию отображения часового пояса для пользователя. Еще раз спасибо за вашу поддержку. –

+0

Ну, я бы не сказал, что локализованные имена tz плохие. Многим пользователям нравится это видеть (на их языке и в локали).Но я также хотел бы представить конкретное числовое смещение tz относительно UTC, чтобы помочь пользователям интерпретировать представленный часовой пояс и соответствующую метку времени. Возможно, идентификаторы являются дополнительной информацией для пользователей, но эти идентификаторы являются довольно техническими и по-прежнему не связаны с уникальной информацией о четком смещении. –