问题说明
关于13/14个小时的时间差的成因,已经有很多文章进行了分析说明。
现在的问题是,数据库已经存储了这些时间,需要在报表展示的时候显示为北京时间。
问题解决
问题的造成是因为时区和令时的问题,因此可以使用 MySQL CONVERT_TZ 函数进行转换显示,关键在于函数的第 2 个参数。
SELECT CONVERT_TZ('2023-03-27 10:00:00', 'America/Chicago', 'Asia/Shanghai');
查询结果(差13个小时):
SELECT CONVERT_TZ('2023-03-07 20:51:49.763', 'America/Chicago', 'Asia/Shanghai');
查询结果(差14个小时):
参考
本文形成过程主要参考 chatgpt 的回答: