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

如何用Python3将MySQL Timestamp转为ISO 8601格式适配sitemap<lastmod>

解决MySQL时间转Sitemap ISO 8601格式问题

核心思路

从MySQL获取的timestamp字符串(如2024-01-26 00:39:24)是无时区信息的 naive datetime 对象(或字符串),需要先将其解析为datetime对象,再指定时区,最后转换为符合要求的ISO 8601格式。

具体实现

情况1:数据库返回的是时间字符串

如果从数据库拿到的是字符串格式的时间,先通过strptime解析为datetime对象,再指定时区:

import datetime

# 从数据库获取的时间字符串
db_time_str = "2024-01-26 00:39:24"

# 1. 解析字符串为无时区的datetime对象
naive_dt = datetime.datetime.strptime(db_time_str, "%Y-%m-%d %H:%M:%S")

# 2. 指定时区(假设数据库存储的是UTC时间,这是最常用的场景)
utc_dt = naive_dt.replace(tzinfo=datetime.timezone.utc)

# 3. 转换为ISO 8601格式,去掉微秒
lastmod_format = utc_dt.replace(microsecond=0).isoformat()
# 输出结果:2024-01-26T00:39:24+00:00

如果数据库存储的是本地时区时间(比如服务器所在的东八区),可以明确指定时区:

import datetime

db_time_str = "2024-01-26 00:39:24"
naive_dt = datetime.datetime.strptime(db_time_str, "%Y-%m-%d %H:%M:%S")

# 指定东八区时区
local_tz = datetime.timezone(datetime.timedelta(hours=8))
local_dt = naive_dt.replace(tzinfo=local_tz)

lastmod_format = local_dt.replace(microsecond=0).isoformat()
# 输出结果:2024-01-26T00:39:24+08:00

情况2:数据库返回的是datetime对象

如果使用的数据库驱动(如pymysql)自动将timestamp字段转换为Python的datetime对象(仍是无时区的naive对象),直接跳过解析步骤,指定时区即可:

import datetime

# 从数据库查询得到的datetime对象
db_dt = ...  # 例如 cursor.fetchone() 中的时间字段

# 指定为UTC时区
utc_dt = db_dt.replace(tzinfo=datetime.timezone.utc)

lastmod_format = utc_dt.replace(microsecond=0).isoformat()

关键说明

  • Sitemap的<lastmod>标签要求的ISO 8601格式必须包含时区信息(如+00:00或Z),isoformat()生成的格式完全符合要求。
  • 务必确认数据库中timestamp字段的时区(是UTC还是本地时区),避免时区转换错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:32:23