同格式日期字符串调用datetime.strptime匹配'%d-%b-%y'为何部分报错?
问题原因
两段代码的核心差异在于日期字符串的分隔符字符不同:
- 报错代码中的日期字符串
"02–MAY-21",第一组分隔符是长破折号(en dash,Unicode编码U+2013,显示为–) - 正常运行的代码中的日期字符串
"02-MAY-21",分隔符是半角连字符(hyphen-minus,Unicode编码U+002D,显示为-)
你定义的解析格式"%d-%b-%y"中指定的分隔符是半角连字符,和输入的长破折号不匹配,因此strptime会抛出格式不匹配的错误。
修复方案
方案1:统一替换分隔符(推荐)
将输入字符串中所有非半角连字符的分隔符统一替换为半角连字符后再解析,适配性更强:
from datetime import datetime required_format="%d-%b-%y" a="02–MAY-21" # 替换长破折号为普通半角连字符 a = a.replace('–', '-') aaa = datetime.strptime(a, required_format) print(aaa)
方案2:直接适配原始分隔符
如果确认输入的分隔符固定为长破折号,也可以直接修改解析格式匹配输入字符:
from datetime import datetime # 格式串使用和输入一致的长破折号 required_format="%d–%b-%y" a="02–MAY-21" aaa = datetime.strptime(a, required_format) print(aaa)
两种方案都可以正常输出2021-05-02 00:00:00。
内容的提问来源于stack exchange,提问作者Pongthorn Sa
相关产品推荐
相关产品推荐

