Ответ 1
Yup, функция convert_tz.
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz
Может ли MySQL преобразовать сохраненное время UTC в локальный timezon: ed time непосредственно в нормальном выборе?
Скажем, у вас есть данные с меткой времени (UTC).
CREATE TABLE `SomeDateTable` (
`id` int(11) NOT NULL auto_increment,
`value` float NOT NULL default '0',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
)
Тогда, когда I
"select value, date from SomeDateTable";
Я, конечно, получаю все даты, как в их сохраненной форме UTC.
Но позвольте сказать, что я хотел бы иметь их в другой часовой пояс (с DST), могу ли я затем добавить волшебство в запрос выбора, чтобы получить все даты в выбранном часовом поясе?
"select value, TIMEZONE(date, "Europe/Berlin") from SomeDateTable";
Или я должен делать это в другом слое сверху, например, в каком-то php-коде? (похоже, большинство людей решили эту проблему).
Спасибо Johan
Если ваша установка MySQL позволяет использовать CONVERT_TZ, это очень чистое решение, в этом примере показано, как его использовать.
SELECT CONVERT_TZ( '2010-01-01 12:00', 'UTC', 'Europe/Stockholm' )
Однако я не знаю, хорошо ли это, так как в некоторых установках MySQL отсутствует эта функция, используйте с осторожностью.
Yup, функция convert_tz.
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz
Для тех, кто не может настроить среду mysql (например, из-за отсутствия доступа SUPER), использовать человеческие имена часового пояса, такие как "Америка/Денвер" или "GMT", вы также можете использовать эту функцию с цифровыми смещениями, такими как:
CONVERT_TZ(date,'+00:00','-07:00')
select convert_tz(now(),@@session.time_zone,'+03:00')
Для получения времени используйте только:
time(convert_tz(now(),@@session.time_zone,'+03:00'))
Я предлагаю использовать
SET time_zone = 'proper timezone';
выполняется сразу после подключения к базе данных. и после этого все временные метки будут автоматически преобразованы при их выборе.
Я не уверен, что математика может быть выполнена по типу данных DATETIME, но если вы используете PHP, я настоятельно рекомендую использовать временные метки на основе целого числа. В принципе, вы можете сохранить 4-байтовое целое в базе данных с помощью функции PHP time(). Это делает математику гораздо более простой.