Nếu điều này cho kết quả là null thì các bảng TZ chưa được thiết lập:
SELECT CONVERT_TZ(now(),'US/Eastern','US/Central');
Nếu bạn chưa thiết lập bảng múi giờ, bạn có thể cập nhật bộ houroffset trong bảng người dùng và sau đó thực hiện:
select utc_timezone() - interval user_timezone_offset_in_hours hour
from userinfo a
where user_id = 999;
Tuy nhiên, bạn vẫn cần một cách để cập nhật múi giờ của người dùng.
Nếu bạn đang viết điều này cho một ứng dụng web, bạn có thể lấy múi giờ thông qua javascript, đây là bài viết mô tả cách thực hiện (chưa thử cách này nhưng có vẻ như nó sẽ hoạt động).
Giải thích một chút về 'khoảng thời gian' ở trên ...
Một trong những cấu trúc thủ thuật khác trong MySQL là sử dụng INTERVAL
từ khóa, được hiển thị tốt nhất bằng ví dụ (giá trị số có thể là một biểu thức hoặc giá trị trường)
select now() today, now() - interval 1 day yesterday;
+---------------------+---------------------+
| today | yesterday |
+---------------------+---------------------+
| 2011-05-26 13:20:55 | 2011-05-25 13:20:55 |
+---------------------+---------------------+
Bạn có thể thêm và trừ chúng theo cách nào bạn thích, đây là lý do tại sao tôi không bao giờ bận tâm với ngày / giờ cộng / trừ / chuyển đổi các chức năng
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 |
+---------------------+---------------------+
Bạn có thể sử dụng các số âm (sẽ tốt cho việc chênh lệch múi giờ âm), chúng giống nhau:
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 |
+---------------------+---------------------+