mysql 数据库时间戳转换为目标时区的时间

默认东8区

SET time_zone = '+08:00';

CONVERT_TZ  第二个参数:按照  网上说是 明确指定源时区是UTC(0时区)当前数据库服务器是东8区,查询的结果第一个data 就差8个小时,第二个 beijing列 是对的

此时 临时将数据库设置0时区

SET time_zone = '+00:00';

查询的结果第一个data 就是对的,第二个 beijing列 也是对的

再次验证

        再次验证  CONVERT_TZ 的第二个参数到底是当前数据库所在时区的动态值,还是按照网上说的就是0时区(明确指定源时区是UTC(0时区)),
        我们将时区转换为任意一个时区,并且 CONVERT_TZ 第二个参数也设置相同的时区,看结果是否正确,如果正确 说明 CONVERT_TZ第二个参数不是网上说的 明确指定源时区是UTC0时区,应该是当前数据库所在的时区,

 我们假设随机设置 东12 时区

结果和预想的一样

得出结果

CONVERT_TZ 第二个参数 应该是当前服务器所在的时区,而不是网上说的 明确指定源时区是UTC(0时区),说的这个前提的当时数据库服务器在0时区没问题,如果不在0时区就不对

 附上sql

--  临时将数据库设置为某个时区
SET time_zone = '+12:00';

-- 查询当前会话时区
SELECT  @@session.time_zone AS session_time_zone;
 -- 定义一个表  里面有个字段  table_start_time 存 毫米级的时间戳
 -- CONVERT_TZ 第一个参数: FROM_UNIXTIME( table_start_time / 1000 )  转换为秒的时间戳  数据库存储时间戳是 1747267200000
 -- CONVERT_TZ 第二个参数:网上说是 明确指定源时区是UTC(0时区),前提是当前数据库服务器是0时区的时间,如果不是0时区转换后的目标时区就不对
 -- CONVERT_TZ 第三个参数:是指定的目标时区,要将此时间戳转换为某个时区的时间
SELECT 
	CONVERT_TZ( FROM_UNIXTIME( table_start_time / 1000 ), '+12:00', '+08:00' ) AS date,
 	CONVERT_TZ( FROM_UNIXTIME( table_start_time / 1000 ), @@SESSION.time_zone, '+08:00' ) AS biejing,
	id
FROM
	tb_teacher_free_time 
WHERE
	del_flag = '0' 
	AND teacher_id = 9670074263 
	
-- 再次验证  CONVERT_TZ 的第二个参数到底是当前数据库所在时区的动态值,还是按照网上说的就是0时区(明确指定源时区是UTC(0时区)),
-- 我们将时区转换为任意一个时区,并且 CONVERT_TZ 第二个参数也设置相同的时区,看结果是否正确,如果正确 说明 CONVERT_TZ第二个参数不是网上说的 明确指定源时区是UTC0时区,
-- 应该是当前数据库所在的时区,我们假设随机设置 东12 时区
--  CONVERT_TZ 第二个参数 应该是当前服务器所在的时区,而不是网上说的 明确指定源时区是UTC(0时区),说的这个前提的当时数据库服务器在0时区没问题,如果不在0时区就不对

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值