Страницы

Поиск по вопросам

пятница, 26 октября 2018 г.

Mysql возвратить время со сдвигом timezone

Есть ли способ возвращать время в зависимости от временной зоны? Я понимаю что есть timestampz, но в данном случае datetime
т.е. хочу получить время по москве (3) исходя из текущего сохраненного (5) где время по москве 14:00
select dt_create + interval 2 hour from t where dt_create - interval 2 hour = 14:00
но загвоздка в том, что я не знаю какие поля - это время. могу ли я в зависимости от типа поля добавлять интервал?


Ответ

Часовые пояса относятся к уровню презентации. Большинство вашего кода не должно заниматься часовыми поясами или местным временем, оно должно передавать Unix-время как оно есть. Когда измеряете время, измеряйте Unix-время. Это UTC. Его просто получить (системными функциями). Оно не имеет часовых поясов или летнего времени (и високосных секунд). Когда храните время, храните Unix-время. Это одно число. Если вы хотите сохранить время, пригодное для чтения человеком (например, в логах), постарайтесь сохранить его вместе с Unix-временем, а не вместо. Когда отображаете время, всегда включайте в него смещение часового пояса. Формат времени без смещения бесполезен. Системные часы не точны. Вы в сети? Системные часы каждой другой машины не точны по-разному. Системные часы могут, и будут, перепрыгивать вперёд и назад во времени из-за вещей, которые вне вашего контроля. Ваша программа должна быть разработана таким образом, чтобы пережить это. Отношение количества секунд системных часов к количеству настоящих секунд — не точно и может меняться. В основном это зависит от температуры. MySQL хранит столбцы типа DATETIME в виде упакованных в числа значений «YYYYMMDD HHMMSS» Если вы озаботились хранением отметок времени, храните их как целое число и используйте для преобразования функции UNIX_TIMESTAMP() и FROM_UNIXTIME().
Что должен знать о времени каждый программист

Комментариев нет:

Отправить комментарий