Хранение даты в БД без проблем с часовыми поясами

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Времянщик
проходил мимо

Хранение даты в БД без проблем с часовыми поясами

Непрочитанное сообщение Времянщик » 2015-02-04 13:19:53

Мужики, столкнулся тут с проблемой:

Есть самописная прога на php+apache+mysql5.6+FreeBSD, типа СРМ система для конторы.
Работала всех устраивая 3 года и тут я сервак обновил до 10-STABLE, и прилетело соответственно изменение часовых поясов от 26 октября 2014 года.

Время во всех местах ушло на час вниз. К тому же заметил это не сразу, а соответственно новые занесённые с момента обновления данные были уже в корректном часовом поясе. Вобщем небольшой караул. В принципе я это решил, но на будущее решил избавить себя от решений правительства в сфере часовых зон.

Подскажите пожалуйста, как лучше это предусмотреть? Хранить дату в виде строки, типа дд-мм-гггг чч.мм.сс?
Работать в запросах с этим не очень удобно, хочется хранить в виде UNIX_TIMESTAMP.

Подскажите пожалуйста решение, как время нормализовать чтобы оно не зависело от часового пояса? В GMT может на серваке его держать всегда, а уже программно приводить к нужному поясу? Или всё-же строка единственный выход?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 34924
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Хранение даты в БД без проблем с часовыми поясами

Непрочитанное сообщение Alex Keda » 2015-02-04 14:18:33

Гмт
Убей их всех! Бог потом рассортирует...

snorlov
подполковник
Сообщения: 3565
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

Хранение даты в БД без проблем с часовыми поясами

Непрочитанное сообщение snorlov » 2015-02-04 14:20:27

Ничего не понял, кроме того, что вы прошляпили переход на зимнее время))) А как раньше работали, при скачках с зимнего на летнее и обратно?

Времянщик
проходил мимо

Хранение даты в БД без проблем с часовыми поясами

Непрочитанное сообщение Времянщик » 2015-02-04 18:16:33

Лис, просто хранить в ГМТ не поможет как я понял. Один фиг допустим сменился на серваке (в час Х) ГМТ+3 на ГМТ+2 и выводиться все данные о времени которые были при ГМТ+3 (до часа Х) станут на час меньше.
Тут решение всё-таки хранить метки времени как строку в дополнение к TIMESTAMP'у. А также вовремя обновлять данные временных зон. В строке время к тому же хранится и с указанием зоны, так что в случае если прошляпил чего-то, то можно UPDATE'ом поменять все TIMESTAMP'ы для дат после смены часовых поясов.
Короче смысл в том, что пока петух в жопу не клюнет... На этой ситуации полностью прочувствовал всю важность внимания к хранению времени в прогах.
Теперь этот вопрос хорошенько обмозгую и в своих делах его буду всегда учитывать. Чего и другим желаю. :)

Аватара пользователя
f_andrey
майор
Сообщения: 2633
Зарегистрирован: 2007-12-26 1:22:58
Откуда: СПб
Контактная информация:

Хранение даты в БД без проблем с часовыми поясами

Непрочитанное сообщение f_andrey » 2015-02-04 19:04:33

Так хранить юникстайм, возможно ещё какую инфу, если его мало и надо ещё что. Там как понимаю не только время периодически то тут, то там меняется, но как стало известно, ещё иногда и секунды прибавляют, утилиты на это, с помощью как раз баз ntp должны нормально реагировать и корректно переводить даты, именно для этого и надо держать актуальную базу.
Если ваша тема перенесена, то смотри viewtopic.php?f=1&t=32308


Вернуться в «Базы данных»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя