2015-04-20 1 views
3

У меня проблема, когда текущий часовой пояс не определен правильно в экземпляре JVM, запущенном внутри контейнера Docker (оба узла и контейнера - Cent OS 6.5).Как Hotspot JVM точно определяет текущий часовой пояс на Linux (Centos)?

Прежде всего я сопоставляются etc/localtime к ребенку контейнера через -v /etc/localtime:/etc/localtime:ro (я думаю, что это prevalent way)

Когда я Войти через SSH как на хост и контейнер

Дата -u

печатает Mon Apr 20 11:48:57 UTC 2015

и

Дата

печатает Mon Apr 20 14:50:41 MSK 2015

В JVM, однако с

System.out.println (новая дата());

Я получаю Mon Apr 20 11:52:24 UTC 2015 внутри контейнера и Mon Apr 20 14:53:17 MSK 2015 внутри хоста.

Как точно определяется текущий часовой пояс?

Oracle FAQ не пролил свет, я не совсем понимаю, что метрики Java делает использование Java, чтобы получить часовой пояс для текущего пользователя

Do моей операционной системы часовых поясов патчей исправить часового пояса данных на платформе Java-?

№ Данные часового пояса платформы Java SE не считываются из локальной или основной операционной системы. Платформа Java SE хранит частный репозиторий данных часового пояса в локально установленных файлах (.../jre/lib/zi) в составе программного обеспечения Java Runtime Environment (JRE) . Применение любых исправлений часовых поясов операционной системы (для примера Solaris OS, Linux, Windows) не повлияет на точность данных часового пояса платформы Java SE .

обновление: если кто-то заинтересованы в обходном пути - я указал переменные окружения TZ, как в ответе Стефана, так что теперь контейнер создается с параметрами

-v/и т.д./LocalTime:/и т.д./LocalTime: ро -e "TZ = Europe/Moscow"

ответ

2

Согласно this page, JVM работает на Linux использует переменную окружения TZ, чтобы дать ему имя локального часового пояса.

На странице далее объясняется, что TZ обычно устанавливается в «/ etc/profile», и это не работает, если Java запущен с использованием механизма, который не «отправляет» этот файл.


Данные часового пояса, на которые ссылается Oracle, относятся к чему-то другому. Это данные, которые JVM использует для сопоставления от имен часовых поясов к соответствующим смещениям зоны (с учетом корректировок на летнее время и т. Д.).

+0

Да - установка TZ работает, однако это тайна, почему время отличается, когда TZ не задан - я попытаюсь проверить TimeZone.setDefaultZone() в свободное время. –

+0

Я предполагаю, что TZ установлен на хосте и не установлен в контейнере, а поведение JVM, если TZ не установлено, - это принять UTC. –

Смежные вопросы