我正在开发一款让用户(老师)安排课程的应用程序。由于该应用程序的用户可能来自世界各地,因此用户表有一个“时区”字段,默认值为“澳大利亚/维多利亚”。课程表有一个“starttime”字段,它记录了 UTC 时间课程开始的 DATETIME。课程的创建者由“ownerId”字段标识,该字段引用用户表中的 ID。 现在,我想做的是将 UTC 开始时间转换为用户的时区,作为选择查询的一部分。
如果我运行这个:
SELECT l.starttime, u.timezone, CONVERT_TZ(l.starttime,"UTC",u.timezone) AS userstart FROM lesson l JOIN user u ON l.ownerId = u.id
我得到的结果是:
2022-09-29 09:05:00 | Australia/Victoria | NULL
但是,如果我将 CONVERT_TZ 函数调用的第三个参数更改为字符串文字,如下所示:
SELECT l.starttime, u.timezone, CONVERT_TZ(l.starttime,"UTC","Australia/Victoria") AS userstart FROM lesson l JOIN user u ON l.ownerId = u.id
我明白了:
2022-09-29 09:05:00 | Australia/Victoria | 2022-09-29 19:05:00
为什么会这样?