Python中将日期字符串转换为Datetime对象出现格式匹配错误如何解决
日期字符串转换问题解答
核心问题说明
你遇到的报错由两个独立问题共同导致:
- 格式串与实际字符串结构完全不匹配:你使用的
%Y%m%d要求输入为无分隔符的8位日期数字(例如20170202),但你实际的字符串是带横杠分隔、时间部分、T/Z标记的ISO标准日期格式,结构完全不符。 - 字符串外层的双引号会直接影响转换:从报错内容可以看到,你传入的时间数据本身就包含双引号
"字符,转换时该字符会被当作字符串的一部分参与格式校验,必然会匹配失败。
ValueError: time data '"2017-02-02T00:00:00Z"' does not match format '%Y%m%d'
正确实现方案
步骤说明
- 先清洗原始字符串:去除外层多余的双引号,再处理末尾的
Z标记(Python内置方法默认将Z识别为普通字符,需要替换为UTC时区标识或者直接移除) - 匹配正确的格式解析字符串,或直接调用适配ISO格式的内置方法完成转换
代码示例
兼容所有Python版本的写法
import datetime date_string = '"2017-02-02T00:00:00Z"' # 清洗字符串:去双引号 + 移除末尾Z clean_str = date_string.strip('"').rstrip('Z') # 按实际结构指定格式串解析 date_value = datetime.datetime.strptime(clean_str, '%Y-%m-%dT%H:%M:%S') # 如果仅需要yyyy-mm-dd格式的日期对象,取date()即可 date_only = date_value.date() # 如果需要输出为yyyy-mm-dd格式的字符串,调用strftime date_str = date_value.strftime('%Y-%m-%d')
Python 3.7+ 简化写法
import datetime date_string = '"2017-02-02T00:00:00Z"' # 清洗字符串:去双引号 + 将Z替换为标准UTC时区标识 clean_str = date_string.strip('"').replace('Z', '+00:00') # 直接调用ISO格式解析方法,无需手动写格式串 date_value = datetime.datetime.fromisoformat(clean_str) date_only = date_value.date()
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

