MySQL中的CONVERT_TZ() 函数
CONVERT_TZ()
是 MySQL 中用于在不同时区之间转换时间的函数。它能够将一个时间值从一个时区转换为另一个时区,非常适用于处理跨时区的时间数据。
函数语法
CONVERT_TZ()
的语法如下:
CONVERT_TZ(datetime_expr, from_tz, to_tz)
datetime_expr
:要转换的时间值,可以是DATE
、TIME
或DATETIME
类型。from_tz
:源时区,表示datetime_expr
所在的时区。to_tz
:目标时区,表示要将时间转换到的时区。
官方文档:https://dev.mysql.com/doc/refman/8.4/en/date-and-time-functions.html#function_convert-tz
示例
以下是一些使用 CONVERT_TZ()
的示例:
示例 1:将 UTC 时间转换为北京时间
SELECT CONVERT_TZ('2025-01-01 00:00:00', 'UTC', 'Asia/Shanghai') AS converted_time;
示例 2:将北京时间转换为 UTC 时间
SELECT CONVERT_TZ('2025-01-01 08:00:00', 'Asia/Shanghai', 'UTC') AS converted_time;
示例 3:使用时区偏移量
SELECT CONVERT_TZ('2025-01-01 00:00:00', '+00:00', '+08:00') AS converted_time;
示例 4:处理无效输入
如果输入的时间格式不正确,或者时区名称无效,CONVERT_TZ()
将返回 NULL
:
SELECT CONVERT_TZ('2025-01-01', 'UTC', 'Invalid/TimeZone') AS converted_time;
相关时区表
- mysql.time_zone:存储时区的基本信息
- mysql.time_zone_leap_second:存储闰秒信息
- mysql.time_zone_name:存储时区名称与时区 ID 的映射关系
- mysql.time_zone_transition:记录时区转换的时间点和转换类型
- mysql.time_zone_transition_type:存储时区转换的具体规则
注意事项
- 时区表必须已加载:
CONVERT_TZ()
函数依赖于 MySQL 的时区表。如果时区表未加载,函数将无法正常工作。可以通过运行以下命令加载时区表:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
(/usr/share/zoneinfo
是 Linux 系统中时区文件的常见路径,具体路径可能因操作系统而异。)
官方文档:https://dev.mysql.com/doc/refman/8.4/en/time-zone-support.html
- 时区名称大小写敏感:时区名称是大小写敏感的,必须与 MySQL 时区表中的名称完全一致。
- 时区偏移量的限制:时区偏移量的范围是
-14:00
到+14:00
。
- MySQL 版本要求:
CONVERT_TZ()
函数在 MySQL 5.5 及以上版本中可用。