Есть ли способ возвращать время в зависимости от временной зоны? Я понимаю что есть 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().
Что должен знать о времени каждый программист
Комментариев нет:
Отправить комментарий