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

UTC/ISO格式datetime转换及timedelta计算报错求助

解决方案

问题根源

你遇到的核心问题是:字符串类型无法直接与timedelta进行运算;第二个脚本若仍报错,大概率是timedelta的引用方式错误(比如未正确导入),而非strptime的转换逻辑问题。

最优解法(避免字符串来回转换)

不要先将datetime对象转为字符串,优先完成时间运算,最后再格式化为你需要的UTC/ISO格式,这是更高效可靠的方式:

from datetime import datetime, timedelta

# 保留datetime对象执行运算
now_dt = datetime.utcnow()
past15min_dt = now_dt - timedelta(minutes=15)

# 格式化为目标字符串格式
now_str = now_dt.isoformat(timespec='milliseconds') + 'Z'
past15min_str = past15min_dt.isoformat(timespec='milliseconds') + 'Z'

print(f"当前UTC时间:{now_str}")
print(f"15分钟前UTC时间:{past15min_str}")

这里用isoformat(timespec='milliseconds')可直接生成保留三位毫秒的格式,比手动切片[:-3]更简洁稳妥。

修复你原脚本的问题

如果坚持要先转字符串再转回datetime对象,务必检查导入语句是否正确,确保timedelta被正确引用:

# 正确导入所需模块
from datetime import datetime, timedelta

now_str = datetime.utcnow().isoformat()[:-3] + 'Z'
# 转换回datetime对象
now_dt = datetime.strptime(now_str, "%Y-%m-%dT%H:%M:%S.%fZ")
# 此时可正常执行时间运算
past15min_dt = now_dt - timedelta(minutes=15)

# 如需输出为指定字符串格式
past15min_str = past15min_dt.isoformat(timespec='milliseconds') + 'Z'
print(past15min_str)

注意:如果你的代码使用import datetime而非from datetime import datetime, timedelta,所有引用都要加上模块前缀,比如datetime.datetime.utcnow()、datetime.timedelta(minutes=15),否则会出现NameError或类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:20:23