Java Time Zone перепутались

голоса
27

Я бег приложения 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 использовать Тихий океан со всей сопутствующей информацией летнего времени? Время на моей машине показывает правильно, так что это, кажется, не быть OS шириной расконфигурации.


Хорошо, вот обновление. Коллега предложил мне обновить JAVA_OPTS в моем / и т.д. / профиле, чтобы включить «-Duser.timezone = США / Тихий океан», который работал (я также видел CATALINA_OPTS, который я обновленный, а). На самом деле, я только что экспортировали изменения в переменных, а не использовать новый / и т.д. / профиль (перезагрузка позже будет забрать изменения, и я буду золотой).

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


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

Задан 08/08/2008 в 22:24
источник пользователем
На других языках...                            


4 ответов

голоса
22

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

$ 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, если / и т.д. / МестноеВремя и / и т.д. / часовой пояс непоследовательны, Java, кажется, читает часовой пояс по умолчанию из / и т.д. / часовой пояс.

Ответил 12/10/2010 в 09:15
источник пользователем

голоса
21

Это «особенность» в том , как JVM просматривает файл ZoneInfo. См Bug ID 6456628 .

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

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

У меня не было никаких проблем с SYMLINK подходом.

Edit: Добавлен «Суд» команды.

Ответил 09/08/2008 в 01:46
источник пользователем

голоса
1

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

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

Ответил 08/10/2008 в 13:18
источник пользователем

голоса
0

Это может помочь перепроверить правила часового пояса вашей ОС с помощью.

/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 / доли / ZoneInfo / .

Ответил 09/08/2008 в 02:01
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more