Python用strptime解析ISO 8601时间戳报ValueError如何解决
报错触发原因
你使用的strptime格式字符串%Y-%m-%dT%H:%M:%SZ仅能匹配精确到秒的时间,而待转换的时间字符串2021-04-06T23:51:50.514Z包含了.514的毫秒部分,格式规则无法匹配该部分内容,因此抛出格式不匹配的ValueError。
处理方案
- 方案一:调整格式字符串,补充毫秒匹配规则
使用%f匹配小数点后的毫秒/微秒部分,修改后的代码如下:
import datetime time = '2021-04-06T23:51:50.514Z' dt = datetime.datetime.strptime(time, '%Y-%m-%dT%H:%M:%S.%fZ')
- 方案二:使用Python 3.7+内置的ISO格式解析方法
无需手动编写格式规则,兼容性更强,适合处理不同精度的ISO 8601时间:
import datetime time = '2021-04-06T23:51:50.514Z' # 将末尾的UTC标识Z替换为符合fromisoformat要求的时区标识 dt = datetime.datetime.fromisoformat(time.replace('Z', '+00:00'))
- 方案三:过滤掉不需要的毫秒部分
如果业务不需要毫秒精度,可以先截断毫秒内容再解析:
import datetime time = '2021-04-06T23:51:50.514Z' clean_time = time.split('.')[0] + 'Z' dt = datetime.datetime.strptime(clean_time, '%Y-%m-%dT%H:%M:%SZ')
内容的提问来源于stack exchange,提问作者meltedhead
相关产品推荐
相关产品推荐

