MariaDB中转换至UTC时区及字符串转日期指定时区可行性咨询
嘿,我来帮你搞定这两个MariaDB的问题,咱们一个个来:
1. 如何在MariaDB中将时区转换为UTC?
MariaDB里最常用的方法是使用CONVERT_TZ()函数,它的语法很直观:
CONVERT_TZ(dt, from_tz, to_tz)
dt:你需要转换的日期/时间值from_tz:源时区,可以是偏移格式(比如+08:00)或者标准时区名称(比如Asia/Shanghai)to_tz:目标时区,这里咱们直接填UTC就行
举个实际例子,把北京时间(UTC+8)的时间转成UTC:
SELECT CONVERT_TZ('2024-05-20 14:30:00', '+08:00', 'UTC'); -- 输出结果:2024-05-20 06:30:00
如果想用时区名称(比如Europe/Paris)来转换,得确保MariaDB已经加载了时区表。如果没加载的话,在Linux系统上可以运行这条命令(需要root权限):
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
加载完成后,就可以这样用:
SELECT CONVERT_TZ('2024-05-20 14:30:00', 'Asia/Shanghai', 'UTC');
2. 在MariaDB中转换字符串为日期时是否可以指定时区?
当然可以!对应你在Oracle里的写法,MariaDB里可以通过字符串转时间 + 时区转换 + 转日期的组合操作来实现。
先回顾下你在Oracle中的代码:
cast(TO_TIMESTAMP_TZ('2018-03-19T06:00:00+01:00','yyyy-mm-dd"T"HH24:mi:ss tzr') at time zone 'UTC' as date)
在MariaDB中,对应的实现可以这样写:
CAST( CONVERT_TZ( STR_TO_DATE('2018-03-19T06:00:00+01:00', '%Y-%m-%dT%H:%i:%s%z'), '+01:00', 'UTC' ) AS DATE );
咱们拆解一下每一步:
STR_TO_DATE(...):把带时区偏移的字符串转成DATETIME类型,其中%z用来解析字符串里的+01:00时区偏移CONVERT_TZ(...):把刚才得到的时间从源时区(+01:00)转换到UTC时区CAST(...) AS DATE:把转换后的UTC时间转成DATE类型
如果你使用的是MariaDB 10.6及以上版本,还可以用TIMESTAMP_TZ类型来更贴近Oracle的写法:
CAST( TIMESTAMP_TZ '2018-03-19T06:00:00+01:00' AT TIME ZONE 'UTC' AS DATE );
这个写法直接声明带时区的时间戳,再转换到UTC后转成日期,逻辑和Oracle几乎一致。
内容的提问来源于stack exchange,提问作者Hary
相关产品推荐
相关产品推荐

