Что если необходимо хранить время в базе данных в GMT, а клиенту отдавать в GMT+1. Как обеспечить корректную конвертацию времени и оставить код прозрачным? Этот вариант решения заключаться в том, чтобы правильно настроить java mysql connector для конвертации времени.
Что необходимо добиться:
Что для этого необходимо настроить:
Официальная документация:
http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-configuration-properties.html
Что необходимо добиться:
- В базе время хранится в GMT;
- При запросах время получаем в GMT+1 (+01:00);
- При сохранении время из GMT+1 конвертируется в GMT.
Что для этого необходимо настроить:
- Часовой пояс GMT для mysql сервера:
Проверить настройки можно так:mysql> set global time_zone = '+00:00'; mysql> set time_zone = '+00:00';
mysql> select now(); mysql> select @@global.time_zone, @@session.time_zone, @@system_time_zone;
- Задать параметр -Duser.timezone=GMT+1 в файле setenv.sh и setenv.bat. Например:
Это надо сделать только если необходимо вручную задать часовой пояс в котором работает приложение, иначе пропустить этот шаг;# file setenv.sh JAVA_OPTS="$JAVA_OPTS -Duser.timezone=GMT ..."
- Перейти к строке с настройкой jdbc.default.url и добавить параметр useTimezone=true. Например:
jdbc.default.url=jdbc:mysql://localhost/lportal?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false&useTimezone=true
- Готово, запускаем и проверяем.
Официальная документация:
http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-configuration-properties.html