пользовательские и динамические часовые пояса в Java - PullRequest
1 голос
/ 21 сентября 2009

У меня есть приложение JSE 6, которое работает в операционной системе с пользовательским часовым поясом.

TimeZone.getDefaultTimeZone() возвращает «GMT», так как часовой пояс, хотя это неверно. Поддерживает ли java пользовательские часовые пояса?

Другая проблема заключается в том, что конфигурация часового пояса (переходы на летнее время) может измениться во время работы приложения.

Будет ли TimeZone.getDefaultTimeZone() возвращать обновленную версию часового пояса при каждом вызове?

Ответы [ 4 ]

3 голосов
/ 21 сентября 2009

Существует TimeZone.setDefaultTimeZone(), который вы можете использовать для изменения часового пояса. Однако вам необходимо сделать это в нужных точках приложения, поскольку часовой пояс по умолчанию хранится в локальном наследуемом потоке. (Кстати, это не документировано в Javadocs!)

Я не верю, что Java обновит информацию о часовом поясе (например, обновит правила), пока JVM работает. Конечно, он не может обнаружить, что системный часовой пояс по умолчанию изменился, поскольку (в Unix / Linux) часовой пояс по умолчанию передается через настройки переменных среды, и процесс не может видеть изменения в переменных окружения своего родителя.

1 голос
/ 22 сентября 2009

Java понимает только очень простой пользовательский формат зоны, например,

  GMT+9:30

По умолчанию будет GMT, если у вас есть что-то, что он не распознает.

Зона Java по умолчанию не изменяется при изменении часового пояса ОС. Вы должны перезапустить JVM. Раньше он обновлял часовой пояс при каждом вызове getDefaultTimeZone (), но я не знаю, почему он прекратил это делать с Java 5.

Еще один недостаток Java Timezone заключается в том, что setDefaultTimezone () влияет на вызывающий поток только при работе с SecurityManager.

0 голосов
/ 21 сентября 2009

Javadoc для java.util.TimeZone описывает, как настроить пользовательские зоны.

0 голосов
/ 21 сентября 2009

Не полный ответ, но ...:

Будет ли TimeZone.getDefaultTimeZone () возвращать обновленную версию часового пояса при каждом вызове?

Вы можете легко проверить это сами; напишите небольшую программу, которая печатает результат TimeZone.getDefaultTimeZone() каждые несколько секунд или около того, затем измените настройку часового пояса ОС во время работы программы и посмотрите, не изменится ли вывод.

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