Обновление timezone в Java

    Сегодня взя Россия обновляет свои сервера, с ОС все достаточно просто, достаточно обновить пакет tzdata, timezone-data или еще как то специфично для конкретной ОС.

    Но есть приложения, которые не используют серверные TZ, например java.
    Для обновления необходимо использовать специальную утилиту tzupdater:

    www.oracle.com/technetwork/java/javase/tzupdater-readme-136440.html

    Не забудьте проверить свои программы!
    Поделиться публикацией

    Похожие публикации

    Комментарии 24
      +1
      Одного меня замучили посты про перевод времени?
        +7
        Актуальная тема. Cегодня тоже столкнулся с необходимостью обновить java.
          0
          Ну а что делать? Если даже хабра до сих пор в «последний раз был на сайте» выводит кривое время? :)
          +1
          Самое хреновое это то что надо перезапускать все java-программы для применения изменений. Еще более хреново, что надо обновить библиотеку joda-time, если ее используете, так как у joda своя информация о таймзонах
            0
            Народ, вам точно помог этот патч? — У меня стоит последний JDK 1.6.0_29-b11 и установлен это патч, но один хрен System.out.println(new Date()) выдает время на час меньше, чем нужно. TimeZone.getDefault().getRawOffset() возвращает «10800000», что соответствует GMT+3, что тоже не верно, т.к. мы сейчас в GMT+4.
            Что интересно, если запустить тест (ключ -t) в этом патуе на свеже-установленную JDK, то он выдает херову тучу ошибок, после применения патча — ошибок в этом тесте нет, но что до, что после патча, время он показывает на час меньше нужного.
            Есть какие-нибудь идеи?
              0
              Последняя выложенная версия updater'а 1.3.42, а последняя фактическая 1.3.44. Отдельно её нигде не скачать, а сайт Oracle предлагает обращаться в поддержку (платную). Можно взять обновление таймзон из репозитория какого-нибудь дистрибутива линукса и заменить папку zi руками или поставить JDK 7, в который включено это обновление.
                0
                Только что скачал и поставил JDK7 (1.7.0_01-b08), с этим патчем и без него, время показывается неправильное. Где конкретно в линуксе искать папку zi? Пример можно?
                  0
                  Я тестировал с JDK 1.7.1, версия tzdata — 2011m. Нужно заменить папку /usr/share/javazi. В репозитории убунты есть нужная версия.
                    0
                    У меня есть 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 на благо общественности? :-)
                        +1
                        Ура!!! Помогло! Спасибо!
                        Распаковал tzdata-java_2011n-1_all.deb и содержимое директории \usr\share\javazi\ из этого архива скинул в %JRE_HOME%\lib\zi\ и в %JDK_HOME%\jre\lib\zi\ (в Windows 7).
                          +1
                          Не за что, сам намучался с этим.
                    0
                    Для проверки правильности используйте параметр -t
                    P.S. Все же задам вопрос, где неправильно показывает?
                      0
                      Да, я знаю, что для проверки того, накатился ли патч, нужно использовать параметр -t. Проблема в другом: несмотря на то, что я накатил патч, выполнил эту проверку (-t) и проверка сказала, что все OK, System.out.println(new Date()) выдает время на час меньше, чем должно быть.
                  0
                  1. У ОС должна быть корректная таймзона выставлена, так как TimeZone.getDefault() берет с установок ОС.
                  2. На каждый инстанс явы апдейт надо отдельно накатывать
                  3. После апдейта надо рестартнуть запущенную ява программу.
                    0
                    1. У ОС с таймзоной все OK (тестирую в Windows 7, timezone стоит UTC+4), но TimeZone.getDefault() возвращает GMT+3.
                    2. Да, я в курсе. Все так и делал.
                    3. Рестартанул не только программу, но и всю систему.

                    Блин, неужели у меня одного такая проблема? У меня на всех компьютерах (дома, на работе) есть эта проблема.
                      0
                      TimeZone.getDefault().getID() правильное значение?
                      TimeZone.getDefault().useDaylightTime() false?
                      помнится был баг на XP когда JVM неправильное значение часового пояса брала, приходилось ключ запуска вручную пихать правильную таймзону.
                        0
                        TimeZone.getDefault().getID() = Europe/Moscow — учитывая, что я в Москве, это правильно
                        TimeZone.getDefault().useDaylightTime() = true — что неправильно, но как я могу на это повлиять?
                  0
                  Друзья, я не против данного треда, хотелось бы узнать, а где вы раньше были, до фактического перевода времени?

                  Неужели за 6 месяцев никто не поднял данную проблему и не решил ее?
                    0
                    Ну лично мы везде все решили, кроме java. Но в пслд момент я задав программистом вопрос, все сделали.
                    0
                    Что-то не удаётся зайти на сайт Oracle по логину и паролю.
                    Видимо, все кинулись качать обновление.
                      0
                      Может кому-нибудь ещё пригодится информация как обновляться на Windows.

                      Скачиваете Oracle Timezone Update Tool.

                      Распаковываете куда-нибудь недалеко, например в корень «C:\».
                      Открываете консоль с админским доступом, чтоб были права записи в «Program Files» и «Program Files (x86)».

                      Заходите в консоли в папки «bin» установленных у вас JDK и JRE и оттуда выполняете команды ниже. Некоторые программы любят использовать собственные JRE (устанавливают в свою папку), про них тоже не забываем.

                      Для тестирования используется флаг "-t". Если всё нормально, то выдаёт пустую строку в консоль. В противном случае — список ошибок.

                      java -jar c:\tzupdater-1.3.45-2011n\tzupdater.jar -t

                      Для обновления используется флаг "-u".

                      java -jar c:\tzupdater-1.3.45-2011n\tzupdater.jar -u
                        0
                        Что-то oracle запаролил все ссылки на скачивание TZupdater
                          0
                          Да и хочет платный саппорт, ищу решение…

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое