如果这产生 null 则 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;
但是,您仍然需要一种方法来更新用户的时区。
如果您正在为 Web 应用程序编写此代码,则可以通过 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 |
+---------------------+---------------------+