Wenn dies null ergibt, wurden die TZ-Tabellen nicht eingerichtet:
SELECT CONVERT_TZ(now(),'US/Eastern','US/Central');
Wenn Sie die Zeitzonentabellen nicht eingerichtet haben, können Sie den Stundenversatz in der Benutzertabelle aktualisieren und dann Folgendes tun:
select utc_timezone() - interval user_timezone_offset_in_hours hour
from userinfo a
where user_id = 999;
Sie benötigen jedoch noch eine Möglichkeit, die Zeitzone des Benutzers zu aktualisieren.
Wenn Sie dies für eine Webanwendung schreiben, können Sie die Zeitzone über Javascript abrufen, hier ist ein Artikel das beschreibt, wie (habe es nicht ausprobiert, aber es sieht so aus, als würde es funktionieren).
Eine kleine Erklärung in Bezug auf 'Intervall' oben...
Eines der trickreicheren Konstrukte in MySQL ist die Verwendung von INTERVAL
Schlüsselwort, am besten am Beispiel des (numerischer Wert kann ein Ausdruck oder der Feldwert sein)
select now() today, now() - interval 1 day yesterday;
+---------------------+---------------------+
| today | yesterday |
+---------------------+---------------------+
| 2011-05-26 13:20:55 | 2011-05-25 13:20:55 |
+---------------------+---------------------+
Sie können sie addieren und subtrahieren, wie Sie möchten, deshalb mache ich das nie sich mit den Funktionen zum Hinzufügen/Subtrahieren/Konvertieren von Datum/Uhrzeit beschäftigen
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 |
+---------------------+---------------------+
Sie können negative Zahlen verwenden (sollte für negative Zeitzonen-Offsets gut sein), diese sind gleich:
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 |
+---------------------+---------------------+