Python datetime.fromisoformat()解析JS Date生成的时间字符串为何报ValueError
问题产生原因
Python 3.11 之前版本的 datetime.fromisoformat() 方法仅支持严格匹配 YYYY-MM-DDTHH:MM:SS[.ffffff][±HH:MM] 格式的ISO时间字符串,无法识别传入字符串末尾代表UTC时区的Z后缀,因此抛出格式不合法的报错。就算是Python 3.11及以上版本,该方法对Z后缀的兼容也存在限制,通用场景下还是建议先对字符串做预处理。
解决方案
下面提供两种最常用的兼容方案:
- 方案1:字符串预处理替换后缀(无第三方依赖,全Python版本通用)
直接将字符串末尾的Z替换为代表UTC时区的+00:00,就可以正常用fromisoformat解析:
mydate = datetime.fromisoformat(form['expirationDate'].replace('Z', '+00:00'))
如果不需要保留时区信息,也可以直接把Z替换为空字符串,解析后得到不带时区的 naive datetime 对象。
- 方案2:使用第三方库直接解析(适配更多ISO格式变体)
如果项目允许安装第三方依赖,可以用python-dateutil库的isoparse方法,无需预处理直接兼容带Z的ISO时间格式:
首先安装依赖:pip install python-dateutil
解析代码:
from dateutil import parser mydate = parser.isoparse(form['expirationDate'])
内容的提问来源于stack exchange,提问作者gene b.
相关产品推荐
相关产品推荐

