Если это дает ноль, то таблицы TZ не были установлены:
SELECT CONVERT_TZ(now(),'US/Eastern','US/Central');
Если у вас не настроены таблицы часовых поясов, вы можете обновить час
смещение в пользовательской таблице и затем выполните:
select utc_timezone() - interval user_timezone_offset_in_hours hour
from userinfo a
where user_id = 999;
Однако вам все равно нужен способ обновить часовой пояс пользователя.
Если вы пишете это для веб-приложения, вы можете получить часовой пояс с помощью javascript, вот статья , в которой описывается, как (не пробовал, но, похоже, это будет работать). 1011 *
Небольшое объяснение относительно "интервала" выше ...
Одной из наиболее хитростей в MySQL является использование INTERVAL
ключевое слово, лучше всего показанное на примере (числовое значение может быть выражением или значением поля)
select now() today, now() - interval 1 day yesterday;
+---------------------+---------------------+
| today | yesterday |
+---------------------+---------------------+
| 2011-05-26 13:20:55 | 2011-05-25 13:20:55 |
+---------------------+---------------------+
Вы можете добавлять их и вычитать их так, как вам нравится, поэтому я никогда
возиться с функцией добавления / вычитания / преобразования даты / времени
select now() a, now() - interval 1 day + interval 4 hour + interval 8 minute b;
+---------------------+---------------------+
| a | b |
+---------------------+---------------------+
| 2011-05-26 13:24:16 | 2011-05-25 17:32:16 |
+---------------------+---------------------+
Вы можете использовать отрицательные числа (должно быть хорошо для отрицательных смещений часового пояса)
это одно и то же:
select now() - interval 1 month a, now() + interval -1 month b;
+---------------------+---------------------+
| a | b |
+---------------------+---------------------+
| 2011-04-26 13:38:05 | 2011-04-26 13:38:05 |
+---------------------+---------------------+