ID часового пояса в Java - PullRequest
       12

ID часового пояса в Java

22 голосов
/ 10 ноября 2009

У меня странная проблема с Java TimeZone ..

Вызов TimeZone.getDefault () дает мой местный часовой пояс с идентификатором «GMT + 02: 00». Забавно, что этот идентификатор не отображается в списке, предоставленном TimeZone.getAvailableIDs () . По-видимому, моя зона выглядит как "Etc / GMT + 2".

Я пытаюсь заполнить комбо часовыми поясами, но невозможно выставить выделение, потому что GMT + 02: 00 нет в списке .. Кто-нибудь видел эту проблему? Есть идеи?


Обновление:

Нижняя строка - не может полагаться на строки идентификаторов, должна идти со смещением, поскольку идентификаторы дисплея могут варьироваться от системы к системе.

Ответы [ 6 ]

33 голосов
/ 10 ноября 2009

GMT + 02: 00 - это пользовательский идентификатор, он не будет отображаться при выводе TimeZone.getAvailableIDs() (что огромно). Что вы можете сделать, это попросить пользователя сначала указать его смещение, а затем получить доступные идентификаторы для данного смещения. Например, для GMT + 02: 00 следующий код:

for (String string : TimeZone.getAvailableIDs(TimeZone.getTimeZone(
        "GMT+02:00").getRawOffset())) {
    System.out.println(string);
}

дает следующий вывод:

ART
Africa/Blantyre
Africa/Bujumbura
Africa/Cairo
Africa/Gaborone
Africa/Harare
Africa/Johannesburg
Africa/Kigali
Africa/Lubumbashi
Africa/Lusaka
Africa/Maputo
Africa/Maseru
Africa/Mbabane
Africa/Tripoli
Asia/Amman
Asia/Beirut
Asia/Damascus
Asia/Gaza
Asia/Istanbul
Asia/Jerusalem
Asia/Nicosia
Asia/Tel_Aviv
CAT
EET
Egypt
Etc/GMT-2
Europe/Athens
Europe/Bucharest
Europe/Chisinau
Europe/Helsinki
Europe/Istanbul
Europe/Kaliningrad
Europe/Kiev
Europe/Mariehamn
Europe/Minsk
Europe/Nicosia
Europe/Riga
Europe/Simferopol
Europe/Sofia
Europe/Tallinn
Europe/Tiraspol
Europe/Uzhgorod
Europe/Vilnius
Europe/Zaporozhye
Israel
Libya
Turkey

На этот раз он все еще большой, но человеческий.

4 голосов
/ 10 ноября 2009

Оглядываясь назад на некоторые другие вопросы SO, похоже, это проблема Java на Windows. Пожалуйста, посмотрите на эту статью , особенно ответ 1, который указывает на ссылку в Википедии, которая может решить вашу проблему с отображением.

2 голосов
/ 12 августа 2014

Время Йода имеет постоянную DateTimeZone.UTC. Этот класс или константа могут быть вам полезны. http://joda -time.sourceforge.net / apidocs / орг / Joda / время / DateTimeZone.html

ОБНОВЛЕНИЕ Java 8

Java 8 также теперь имеет ZoneOffset.UTC: https://docs.oracle.com/javase/8/docs/api/java/time/ZoneOffset.html#UTC

2 голосов
/ 10 ноября 2009

Как насчет использования TimeZone.getAvailableIDs () и сгруппировать их по части перед косой чертой и сделать двухэтапный выбор?

1 голос
/ 10 ноября 2009

Любой часовой пояс может быть указан как «GMT» плюс / минус смещение. документ часового пояса называется «пользовательским идентификатором».

Чтобы заполнить раскрывающийся список, я думаю, что вам лучше составить конкретный список городов / смещений с привязкой к часовому поясу. Массив, возвращаемый getAvailableIDs(), огромен - 586 записей в моей установке - и вы определенно не хотите заставлять своих пользователей пробираться через это.

0 голосов
/ 14 декабря 2011

UTC не по Гринвичу. Когда люди (включая технику с Java-образованием) начинают понимать это. GMT ИМЕЕТ летнее время (да!) UTC никогда не меняется (!). Я думаю, что все должны знать об этом, как правило о високосном году или високосной минуте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...