以下行为让我感到困惑。我的mysql服务器安装在带有EEST时区的PC上。 我想将mysql中的日期时间转换为UTC日期。
执行时
select CONVERT_TZ('1970-01-01 02:00:01', 'SYSTEM', '+00:00')
响应是: ' 1970-01-01 00:00:01'
同样,执行时
select CONVERT_TZ('1970-01-01 04:00:00', 'SYSTEM', '+00:00')
回复是:' 1970-01-01 02:00:00'
然而,当我基本上想要0 unix时间时,执行:
select CONVERT_TZ('1970-01-01 02:00:00', 'SYSTEM', '+00:00')
再次响应:' 1970-01-01 02:00:00'
为什么?难道我做错了什么?如何获得正确的值,即1970-01-01 00:00:00'?
答案 0 :(得分:0)
我认为这里的问题是在CONVERT_TZ
中进行的调整将导致在 UNIX纪元的开始之前或之前导致时间戳将被忽略,并且原始输入时间戳将被忽略将被退回。请考虑以下三个查询:
SELECT CONVERT_TZ('1970-01-01 01:00:01', 'SYSTEM', '+00:00');
-- '1970-01-01 00:00:01'
SELECT CONVERT_TZ('1970-01-01 01:00:00', 'SYSTEM', '+00:00');
-- '1970-01-01 01:00:00'
SELECT CONVERT_TZ('1970-01-01 00:30:00', 'SYSTEM', '+00:00');
-- '1970-01-01 00:30:00'
只有第一个查询调整时间戳;第二个只返回输入。
根据@Thomas上面给出的优秀评论,我从CONVERT_TZ
的MySQL documentation中提取了以下内容:
如果从from_tz转换为UTC时,该值超出了TIMESTAMP类型支持的范围,则不会发生转换。