Обнаружили тут одну интересную особенность в нашей программе. Неправильно показывает время. Не сильно так, а всего на час разницы. Это все последствие отмены перехода с летнего времени на зимнее и обратно. Мы-то можем перейти очень просто. Подкрутил стрелочку на часах и все, больше ничего не нужно. А вот компьютеры у нас умные. Они сами стараются переходить с летнего на зимнее и обратно.
Поскольку сейчас переходить никуда не нужно, то и компьютерам тоже нужно сказать об этом. Но… как всегда вмешивается одно или второе “но”. Компьютеры и серверы мы просто перевели, а вот программа, почему-то отказывается переводиться.
В программе у нас простая цепочка. На локальном компьютере работает клиентская программа под Windows, которая отображает данные, получаемые с Web сервиса Tomcat (установлен на Centos), написанного на Java, а этот Web сервис хранит данные в базе Postgre SQL.
Цепочка такая Windows_программа<-Java Web Service<-Postgre SQL
Кто из них показывает неправильный часовой пояс?
Локальное время на рабочей станции правильное, т.е. время не с рабочей станции показывается.
Проверяем на сервере, время тоже правильное.
Проверяем Postgre SQL
Можно посмотреть время командой
SELECT now();
Если выводимое время отличается от времени сервера, значит либо в базе данных настроен неправильный часовой пояс, либо у самого пользователя в настройках стоит неправильный часовой пояс. Postgree SQL позволяет на базу данных поставить один часовой пояс, а разные пользователи могут подключаться из разных часовых поясов и у них будет отображаться время в соответствии с их часовым поясом.
Проверяем в базе данных mybase
psql -c ‘show timezone’ mybase
или подключившись к базе
show timezone
Посмотреть какие есть timezone
SELECT * FROM pg_timezone_names;
Изменить в таблице mytable на Москву
ALTER DATABASE mytable SET timezone TO ‘W-SU';
Изменить у пользователя myuser
ALTER ROLE myuser SET TimeZone = ‘W-SU';
После этого перезайти под пользователем и проверить
SELECT now();
Если показывает время правильно, то здесь закончили, переходим к TomCat
Здесь нужно в файле, который находится в каталоге сервера /bin/catalina.sh
прописать где-нибудь в начале следующее
TOMCAT_TIMEZONE=”-Duser.timezone=UTC-3″
CATALINA_OPTS=”$CATALINA_OPTS $TOMCAT_TIMEZONE”
и перезапустить TomCat