You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
);

咱们拆解一下每一步:

  1. STR_TO_DATE(...):把带时区偏移的字符串转成DATETIME类型,其中%z用来解析字符串里的+01:00时区偏移
  2. CONVERT_TZ(...):把刚才得到的时间从源时区(+01:00)转换到UTC时区
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:44:23