如何将带Z后缀的datetime字符串转换为datetime对象
带Z后缀ISO时间字符串转datetime对象解决方案
报错原因
Python 标准库的datetime.datetime.fromisoformat()方法在3.11版本之前,不支持直接解析末尾带Z标识的ISO 8601时间字符串,Z是UTC时区的缩写,属于合法的ISO时间格式,但旧版本的fromisoformat仅能识别+00:00格式的时区后缀。
解决方法
方法1:字符串替换(兼容性最好,所有Python3版本通用)
将字符串末尾的Z替换为+00:00,再调用fromisoformat解析,得到带UTC时区信息的datetime对象:
import datetime raw_time = "2021-11-13T09:20:15.497Z" dt = datetime.datetime.fromisoformat(raw_time.replace("Z", "+00:00")) # 如果不需要保留时区信息,可以追加去掉时区的操作 # dt = dt.replace(tzinfo=None)
方法2:使用strptime指定格式解析
直接通过指定时间格式字符串完成解析,该方法得到的是不带时区信息的naive datetime对象:
import datetime raw_time = "2021-11-13T09:20:15.497Z" dt = datetime.datetime.strptime(raw_time, "%Y-%m-%dT%H:%M:%S.%fZ")
方法3:升级到Python 3.11及以上版本
Python 3.11版本对fromisoformat做了优化,已经原生支持带Z后缀的ISO时间字符串解析,直接调用即可:
import datetime raw_time = "2021-11-13T09:20:15.497Z" dt = datetime.datetime.fromisoformat(raw_time)
内容的提问来源于stack exchange,提问作者Sad Land
相关产品推荐
相关产品推荐

