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

Pandas中转换Datetime格式适配MySQL数据库的方法

处理Pandas带时区Datetime适配MySQL并保留时区信息的最佳方式

核心前提

MySQL中TIMESTAMP类型会自动将存储的时间转换为UTC,查询时再转换回会话时区;而DATETIME(MySQL 8.0.19及以上版本)支持解析带时区的字面量,但本身不存储时区偏移,仅保留时间值。如果要完整保留原始时区信息,有两种可靠方案:


方案1:转换为带时区偏移的字符串,配合DATETIME存储(保留原始偏移)

Pandas的带时区datetime对象可以直接格式化为ISO 8601标准的字符串,MySQL能直接解析这种格式,同时完整保留原始时区偏移信息。

import pandas as pd

# 示例带时区的Datetime对象
dt = pd.to_datetime("2016-01-31T20:13:48.000+02:00", utc=False)

# 格式化为MySQL可解析的带时区字符串
formatted_dt = dt.strftime('%Y-%m-%d %H:%M:%S%z')
# 输出结果:'2016-01-31 20:13:48+0200'

存入MySQL时,将字段类型设为DATETIME(不建议用VARCHAR,避免解析问题),查询后可再解析回带时区的datetime对象。

方案2:使用TIMESTAMP类型存储(自动时区转换,保留UTC时间)

如果业务允许基于UTC统一管理时间,可将Pandas的datetime对象转换为UTC时间后,存入MySQL的TIMESTAMP字段:

# 转换为UTC时间
dt_utc = dt.tz_convert('UTC')

# 格式化为MySQL兼容格式
formatted_utc = dt_utc.strftime('%Y-%m-%d %H:%M:%S')
# 输出结果:'2016-01-31 18:13:48'

MySQL的TIMESTAMP会将该时间以UTC存储,查询时根据当前会话时区自动转换,能保证跨时区场景下的时间一致性。


注意事项

  • 确保MySQL连接会话的时区设置正确,避免转换过程中出现时间偏移错误;
  • 如果业务要求严格保留原始时区偏移信息,优先选择方案1,但查询后需要自行解析字符串恢复带时区的datetime对象;
  • 不要直接将Pandas的datetime对象传入SQL执行语句,建议先格式化为字符串再传入,防止数据库驱动自动转换时丢失时区信息。

内容的提问来源于stack exchange,提问作者DeBe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:15:35