为什么使用datetime.fromisoformat()会提示isoformat字符串无效,如何解决?
报错原因
Python原生datetime.fromisoformat()方法仅支持带冒号分隔的ISO 8601时区偏移格式(如+00:00),无法识别无冒号的+0000格式,因此会抛出格式错误。
解决方案
方案1:使用strptime指定格式解析(推荐,兼容性最好)
直接用%z格式符匹配不带冒号的时区偏移,无需修改原字符串:
import datetime mytime = "2021-10-25T14:17:13+0000" newtime = datetime.datetime.strptime(mytime, "%Y-%m-%dT%H:%M:%S%z")
方案2:修改原字符串补全冒号后用fromisoformat解析
如果偏好使用fromisoformat,可以手动给时区偏移补冒号:
import datetime mytime = "2021-10-25T14:17:13+0000" # 给最后四位时区偏移补冒号,把+0000改成+00:00 formatted_time = f"{mytime[:-2]}:{mytime[-2:]}" newtime = datetime.datetime.fromisoformat(formatted_time)
方案3:Python 3.11+版本直接兼容
Python 3.11及更高版本优化了fromisoformat的兼容性,已经支持解析无冒号的时区偏移格式,直接调用原方法即可正常运行。
内容的提问来源于stack exchange,提问作者pepe
相关产品推荐
相关产品推荐

