Jeśli daje to wartość null, oznacza to, że tabele TZ nie zostały skonfigurowane:
SELECT CONVERT_TZ(now(),'US/Eastern','US/Central');
Jeśli nie masz skonfigurowanych tabel stref czasowych, możesz zaktualizować przesunięcie godzin w tabeli użytkownika, a następnie:
select utc_timezone() - interval user_timezone_offset_in_hours hour
from userinfo a
where user_id = 999;
Jednak nadal będziesz potrzebował sposobu na zaktualizowanie strefy czasowej użytkownika.
Jeśli piszesz to dla aplikacji internetowej, możesz uzyskać strefę czasową za pomocą javascript, oto artykuł który opisuje, jak (nie próbowałem tego, ale wygląda na to, że zadziała).
Trochę wyjaśnienia w odniesieniu do „przedziału” powyżej...
Jedną z bardziej skomplikowanych konstrukcji w MySQL jest użycie INTERVAL
słowo kluczowe, najlepiej pokazane na przykładzie (wartość liczbowa może być wyrażeniem lub wartością pola)
select now() today, now() - interval 1 day yesterday;
+---------------------+---------------------+
| today | yesterday |
+---------------------+---------------------+
| 2011-05-26 13:20:55 | 2011-05-25 13:20:55 |
+---------------------+---------------------+
Możesz je dodawać i odejmować w dowolny sposób, dlatego nigdy zawracać sobie głowę funkcjami dodawania/odejmowania/konwertowania daty/godziny
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 |
+---------------------+---------------------+
Możesz użyć liczb ujemnych (powinny być dobre dla ujemnych przesunięć stref czasowych), są to takie same:
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 |
+---------------------+---------------------+