Вопрос

Я запускаю приложение Tomcat, и мне нужно отобразить некоторые значения времени.К сожалению, время приближается к часу перерыва.Я изучил его и обнаружил, что мой часовой пояс по умолчанию установлен на:

sun.util.calendar.ZoneInfo[id="GMT-08:00",
                           offset=-28800000,
                           dstSavings=0,
                           useDaylight=false,
                           transitions=0,
                           lastRule=null]

Вместо тихоокеанского часового пояса.Это дополнительно указывается, когда я пытаюсь распечатать часовой пояс по умолчанию. отображаемое имя, и появляется сообщение «GMT-08:00», что, по моему мнению, указывает на то, что часовой пояс США в Тихоокеанском регионе установлен неправильно.Я использую Ubuntu Hardy Heron, обновленную с Gutsy Gibbon.

Есть ли файл конфигурации, который я могу обновить, чтобы указать JRE использовать Pacific со всей соответствующей информацией о летнем времени?Время на моей машине показывает правильно, поэтому это не похоже на неверную конфигурацию всей ОС.


Хорошо, вот обновление.Коллега предложил мне обновить JAVA_OPTS в моем /etc/profile, включив в него "-Duser.timezone=US/Pacific", и это сработало (я также видел CATALINA_OPTS, который я также обновил).На самом деле, я просто экспортировал изменения в переменные, а не использовал новый /etc/profile (позже перезагрузка зафиксирует изменения, и я буду в восторге).

Однако я все же думаю, что есть лучшее решение...где-то должна быть конфигурация для Java, в которой указано, какой часовой пояс он использует или как он захватывает часовой пояс.Если кто-то знает такую ​​настройку, это было бы здорово, но на данный момент это достойный обходной путь.


Я использую версию 1.5, и это определенно проблема с переходом на летнее время.Как видите, в часовом поясе не используется летнее время.Я считаю, что обычно для него установлено смещение -8, а не конкретный часовой пояс Тихого океана.Поскольку общее смещение -8 не содержит информации о переходе на летнее время, оно, конечно, не используется, но вопрос в том, где мне указать Java использовать тихоокеанский часовой пояс при запуске?Я НЕ ищу программное решение, это должно быть конфигурационное решение.

Это было полезно?

Решение

Это «причуда» в том, как JVM ищет файл Zoneinfo.Видеть Идентификатор ошибки 6456628.

Самый простой обходной путь — сделать /etc/localtime символической ссылкой на правильный файл Zoneinfo.Для тихоокеанского времени должны работать следующие команды:

# sudo cp /etc/localtime /etc/localtime.dist
# sudo ln -fs /usr/share/zoneinfo/America/Los_Angeles /etc/localtime

У меня не было никаких проблем с подходом с использованием символических ссылок.

Редактировать:В команды добавлено "sudo".

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

В Ubuntu недостаточно просто изменить файл /etc/localtime.Кажется, он тоже читает файл /etc/timezone.Лучше следовать инструкция чтобы правильно установить часовой пояс.В частности, сделайте следующее:

$ sudo cp /etc/timezone /etc/timezone.dist
$ echo "Australia/Adelaide" | sudo tee /etc/timezone
Australia/Adelaide
$ sudo dpkg-reconfigure --frontend noninteractive tzdata

Current default time zone: 'Australia/Adelaide'
Local time is now:      Sat May  8 21:19:24 CST 2010.
Universal Time is now:  Sat May  8 11:49:24 UTC 2010.

В моей Ubuntu, если /etc/localtime и /etc/timezone несовместимы, Java, похоже, читает часовой пояс по умолчанию из /etc/timezone .

У меня была похожая проблема, возможно, та же самая.Однако мой сервер Tomcat работает в окне Windows, поэтому решение с символической ссылкой не будет работать.

я установил -Duser.timezone=Australia/Sydney в JAVA_OPTS однако tomcat не распознал, что действует летнее время.В качестве обходного пути я изменил Australia/Sydney (GMT+10:00) до Pacific/Numea (GMT+11:00), чтобы время отображалось правильно, однако мне хотелось бы узнать фактическое решение или ошибку, если таковая имеется.

Это может помочь перепроверить правила часового пояса, которые использует ваша ОС.

/usr/bin/zdump -v /etc/localtime | less

Этот файл должен содержать правила перехода на летнее время, например, для 2080 года:

/etc/localtime  Sun Mar 31 01:00:00 2080 UTC = Sun Mar 31 02:00:00 2080 BST isdst=1 gmtoff=3600

Вы можете сравнить это с правилами часового пояса, которые, по вашему мнению, вам следует использовать.Их можно найти в /usr/share/zoneinfo/.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top