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

使用datetime.strptime()解析带Z时间字符串报ValueError如何解决

问题根因

触发值错误的核心原因是格式串中的%Z占位符使用错误:

  • %Z仅能匹配Python内置注册的时区全称/缩写(比如UTC、EST、本地时区标识),无法匹配时间串尾部代表UTC(祖鲁时间)的单字符标识Z。
  • 你提供的示例代码还存在基础语法问题:from datetime import 语句未指定导入对象、格式串编写截断,运行时会先抛出语法错误。
  • 注意:%z占位符同样无法匹配单独的Z,该占位符仅支持识别±HHMM格式的时区偏移值(比如+0800、-0500)。
正确解析方法

根据使用的Python版本和时区需求,选以下任意一种方案即可:

方案1:固定匹配Z字符(全版本兼容,最简便)

由于该格式下尾部Z是固定值,直接把Z作为固定字符写入格式串即可,不需要用时区占位符:

from datetime import datetime

time_str = "2019-11-14T03:41:12.869000Z"
dt = datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S.%fZ")

# 拆分日期、时间部分
date_part = dt.date()
time_part = dt.time()

方案2:保留UTC时区信息(Python 3.2+支持)

如果需要生成带时区属性的时间对象,可以先剥离尾部Z解析时间主体,再手动挂载UTC时区:

from datetime import datetime, timezone

time_str = "2019-11-14T03:41:12.869000Z"
dt_utc = datetime.strptime(
    time_str.rstrip("Z"), 
    "%Y-%m-%dT%H:%M:%S.%f"
).replace(tzinfo=timezone.utc)

方案3:内置ISO解析(Python 3.11+支持,无需手写格式串)

Python 3.11版本对fromisoformat方法做了升级,原生支持带Z后缀的ISO8601格式时间串,不需要手动编写格式匹配串:

from datetime import datetime

dt = datetime.fromisoformat("2019-11-14T03:41:12.869000Z")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:51:25