Самое хреновое это то что надо перезапускать все java-программы для применения изменений. Еще более хреново, что надо обновить библиотеку joda-time, если ее используете, так как у joda своя информация о таймзонах
Народ, вам точно помог этот патч? — У меня стоит последний JDK 1.6.0_29-b11 и установлен это патч, но один хрен System.out.println(new Date()) выдает время на час меньше, чем нужно. TimeZone.getDefault().getRawOffset() возвращает «10800000», что соответствует GMT+3, что тоже не верно, т.к. мы сейчас в GMT+4.
Что интересно, если запустить тест (ключ -t) в этом патуе на свеже-установленную JDK, то он выдает херову тучу ошибок, после применения патча — ошибок в этом тесте нет, но что до, что после патча, время он показывает на час меньше нужного.
Есть какие-нибудь идеи?
Последняя выложенная версия updater'а 1.3.42, а последняя фактическая 1.3.44. Отдельно её нигде не скачать, а сайт Oracle предлагает обращаться в поддержку (платную). Можно взять обновление таймзон из репозитория какого-нибудь дистрибутива линукса и заменить папку zi руками или поставить JDK 7, в который включено это обновление.
Только что скачал и поставил JDK7 (1.7.0_01-b08), с этим патчем и без него, время показывается неправильное. Где конкретно в линуксе искать папку zi? Пример можно?
У меня есть Ubuntu 10.04.3 LTS, со всеми обновлениями, в ней имеется Java 1.6.0_26. Директории /usr/share/javazi у меня нет, но есть /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/zi.tzdata2011g, что в общем-то, немного устаревшая версия.
Ко всему прочему, у меня есть подозрения, что версия 1.3.44 патча вряд ли решит проблему, т.к. если посмотреть changelog с 1.3.42 до 1.3.44 ничего напрямую относящегося к России там нет. Но я могу ошибаться.
В любом случае, мог бы ты где-нибудь выложить этот 2011m на благо общественности? :-)
Ура!!! Помогло! Спасибо!
Распаковал tzdata-java_2011n-1_all.deb и содержимое директории \usr\share\javazi\ из этого архива скинул в %JRE_HOME%\lib\zi\ и в %JDK_HOME%\jre\lib\zi\ (в Windows 7).
Да, я знаю, что для проверки того, накатился ли патч, нужно использовать параметр -t. Проблема в другом: несмотря на то, что я накатил патч, выполнил эту проверку (-t) и проверка сказала, что все OK, System.out.println(new Date()) выдает время на час меньше, чем должно быть.
1. У ОС должна быть корректная таймзона выставлена, так как TimeZone.getDefault() берет с установок ОС.
2. На каждый инстанс явы апдейт надо отдельно накатывать
3. После апдейта надо рестартнуть запущенную ява программу.
1. У ОС с таймзоной все OK (тестирую в Windows 7, timezone стоит UTC+4), но TimeZone.getDefault() возвращает GMT+3.
2. Да, я в курсе. Все так и делал.
3. Рестартанул не только программу, но и всю систему.
Блин, неужели у меня одного такая проблема? У меня на всех компьютерах (дома, на работе) есть эта проблема.
TimeZone.getDefault().getID() правильное значение?
TimeZone.getDefault().useDaylightTime() false?
помнится был баг на XP когда JVM неправильное значение часового пояса брала, приходилось ключ запуска вручную пихать правильную таймзону.
TimeZone.getDefault().getID() = Europe/Moscow — учитывая, что я в Москве, это правильно
TimeZone.getDefault().useDaylightTime() = true — что неправильно, но как я могу на это повлиять?
Распаковываете куда-нибудь недалеко, например в корень «C:\».
Открываете консоль с админским доступом, чтоб были права записи в «Program Files» и «Program Files (x86)».
Заходите в консоли в папки «bin» установленных у вас JDK и JRE и оттуда выполняете команды ниже. Некоторые программы любят использовать собственные JRE (устанавливают в свою папку), про них тоже не забываем.
Для тестирования используется флаг "-t". Если всё нормально, то выдаёт пустую строку в консоль. В противном случае — список ошибок.
Обновление timezone в Java