看起来似乎无法从MySQL字段中获取原始UTC值;每个功能都使用时区设置,即SYSTEM或您配置的任何其他功能。
MySQL强迫您使用日期转换的方式至少是非常有限的。例如,假设您将MySQL服务器设置为GMT -03:00和GMT / DST -02:00的时区,并且您存储的日期时间类似于2016-07-01 10:00:00' 。如果您在夏令时结束后选择此值,您将获得2016-07-01 09:00:00'。
除非您单独存储GMT偏移量,或者您之前知道服务器存储时的时区,否则您无法确定确切的时间。
我们使用了第二种方法。我们保存了服务器时区并用它来计算偏移并返回ISO日期时间,因此可以很容易地进行未来的计算。
DROP FUNCTION IF EXISTS `iso_datetime`;;
CREATE FUNCTION `iso_datetime` (
p_datetime TIMESTAMP
) RETURNS VARCHAR(25)
READS SQL DATA
BEGIN
DECLARE _timezone VARCHAR(255) DEFAULT NULL;
DECLARE _offset VARCHAR(6) DEFAULT NULL;
SET _timezone = (SELECT timezone FROM network);
SET _offset = (SELECT SUBSTRING(TIMEDIFF(p_datetime,CONVERT_TZ(p_datetime, _timezone,'UTC')), 1,6));
RETURN CONCAT(DATE_FORMAT(p_datetime, '%Y-%m-%dT%H:%i:%S'), _offset);
END;
为了做到这一点,你必须将时区信息加载到MySQL中,这样服务器就可以为你计算日期的tz偏移量。