Ако това даде нула, значи таблиците 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, ето статия това описва как (не съм пробвал това, но изглежда, че ще работи).
Малко обяснение по отношение на "интервала" по-горе...
Една от най-триковите конструкции в 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 |
+---------------------+---------------------+