Python转换带Z后缀的ISO时间为Unix时间戳报错如何处理
你提到的2020-01-01T01:39:40.000000Z属于ISO 8601标准的UTC时间格式,末尾的Z是时区标识,代表零时区(UTC+0),你的猜测正确。
报错原因
Python 3.11之前版本的datetime.fromisoformat()方法不支持直接解析带Z后缀的ISO格式字符串,仅支持无后缀、或时区部分为±HH:MM格式的输入,因此你传入带Z的字符串会触发ValueError。
解决方案
方案1:Python 3.11及以上版本直接使用
3.11版本已经对fromisoformat做了更新,原生支持Z后缀的ISO时间解析,你的原代码可以直接运行,无需修改。
方案2:低版本Python使用strptime指定格式解析
不需要手动去除末尾的.000000Z,直接指定匹配的格式字符串即可,注意要手动绑定UTC时区,避免转时间戳时默认使用本地时区导致结果错误:
from datetime import datetime, timezone time_str = '2020-01-01T01:39:40.000000Z' # 按格式解析后绑定UTC时区 dt = datetime.strptime(time_str, "%Y-%m-%dT%H:%M:%S.%fZ").replace(tzinfo=timezone.utc) unix_timestamp = dt.timestamp() print(unix_timestamp) # 输出:1577842780.0
方案3:使用第三方库python-dateutil解析
如果项目允许安装第三方依赖,python-dateutil的解析器可以自动适配各种ISO时间变体,无需手动指定格式:
from dateutil import parser time_str = '2020-01-01T01:39:40.000000Z' dt = parser.isoparse(time_str) unix_timestamp = dt.timestamp()
内容的提问来源于stack exchange,提问作者se7en
相关产品推荐
相关产品推荐

