Обработка часовых поясов в MySQL без zoneinfo

Кажется, нет способа заставить MySQL возвращать отформатированное время из временных меток без импорта информации о зоне.

Если я использую

SET time_zone = '-4:00'

и я создаю метку времени для 18:00 1 ноября, когда проходит летнее время и часовой пояс изменяется на -5:00, это событие больше не будет отображаться в правильное время.

Можно ли загрузить данные часового пояса из приложения? Или мне нужно получить все мои временные метки как временные метки UNIX и преобразовать их в приложение? Если это так, это помешает мне правильно сортировать даты, которые не имеют времени 00:00, независимо от часового пояса в MySQL.

Для пояснения этого последнего пункта у меня есть столбец даты, который преобразуется в метку времени, когда метка времени равна нулю. Это выглядит примерно так:

select my_date, my_timestamp
  from my_table
  where if(my_timestamp, my_timestamp, timestamp(my_date))

Чтобы уточнить комментарий: это хранится в виде временных меток и преобразуется в местное время. Можно вернуть несколько событий, которые охватывают изменение летнего времени. В итоге я преобразовал все времена в PHP, что неудобно, так как для этого требуется PHP 5.1 или выше.


person Sean    schedule 10.11.2010    source источник
comment
Я рекомендую держаться подальше от местного времени: как вы видели, оно хрупкое. Используйте UTC для всего в вашей базе данных и конвертируйте в/из местного времени только для отображения/ввода в пользовательском интерфейсе.   -  person Celada    schedule 29.12.2011