Я запускаю приложение Tomcat, и мне нужно отобразить некоторые значения времени. К сожалению, время приближается на час. Я посмотрел на это и обнаружил, что мой TimeZone по умолчанию устанавливается на:
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, и это определенно проблема DST. Как видите, часовой пояс настроен так, чтобы не использовать летнее время. Я считаю, что в общем случае он установлен на смещение -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" в команды.
Это может помочь перепроверить правила часового пояса, которые использует ваша ОС.
/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 / .
У меня была похожая проблема, возможно, такая же. Однако мой сервер Tomcat работает на Windows, так что решение Symlink не будет работать.
Я поставил -Duser.timezone=Australia/Sydney
в JAVA_OPTS
однако кот не признает , что DST был в действительности. В качестве обходного пути я изменил Australia/Sydney
(GMT + 10: 00) на Pacific/Numea
(GMT + 11: 00), чтобы время корректно отображалось, однако я хотел бы узнать фактическое решение или ошибку, если таковые имеются.
В 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.