Pokud to dává hodnotu null, pak tabulky TZ nebyly nastaveny:
SELECT CONVERT_TZ(now(),'US/Eastern','US/Central');
Pokud nemáte nastavené tabulky časových pásem, můžete aktualizovat hodinový posun v uživatelské tabulce a poté provést:
select utc_timezone() - interval user_timezone_offset_in_hours hour
from userinfo a
where user_id = 999;
Stále však potřebujete způsob, jak aktualizovat časové pásmo uživatele.
Pokud to píšete pro webovou aplikaci, můžete časové pásmo získat pomocí javascriptu, zde je článek to popisuje jak (toto jsem nezkoušel, ale vypadá to, že to bude fungovat).
Trochu vysvětlení s ohledem na „interval“ výše...
Jednou z trikových konstrukcí v MySQL je použití INTERVAL
klíčové slovo, nejlépe znázorněné na příkladu (číselná hodnota může být výraz nebo hodnota pole)
select now() today, now() - interval 1 day yesterday;
+---------------------+---------------------+
| today | yesterday |
+---------------------+---------------------+
| 2011-05-26 13:20:55 | 2011-05-25 13:20:55 |
+---------------------+---------------------+
Můžete je přidávat a odečítat, jak chcete, proto nikdy obtěžujte se funkcemi pro přidání/odčítání/převod data/času
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 |
+---------------------+---------------------+
Můžete použít záporná čísla (mělo by být dobré pro záporné posuny časových pásem) jsou stejná:
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 |
+---------------------+---------------------+