如何解决strptime 错误像这次数据 '01–MAY-21' 与格式 '%d-%b-%y' 不匹配
我尝试这样的代码,它发生错误。 我不知道下面哪个部分是错误代码? 我不能将代码用作下面的第一个示例。我做错了什么?
from datetime import datetime
required_format="%d-%b-%y"
a="02–MAY-21"
print(a)
aaa = datetime.strptime(a,required_format)
print(aaa)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-91-aea82823c657> in <module>
7
8
----> 9 x_date = datetime.strptime(str_date,datetime_format)
10 print(x_date)
D:\ProgramData\Anaconda3\envs\mybase\lib\_strptime.py in _strptime_datetime(cls,data_string,format)
566 """Return a class cls instance based on the input string and the
567 format string."""
--> 568 tt,fraction,gmtoff_fraction = _strptime(data_string,format)
569 tzname,gmtoff = tt[-2:]
570 args = tt[:6] + (fraction,)
D:\ProgramData\Anaconda3\envs\mybase\lib\_strptime.py in _strptime(data_string,format)
347 found = format_regex.match(data_string)
348 if not found:
--> 349 raise ValueError("time data %r does not match format %r" %
350 (data_string,format))
351 if len(data_string) != found.end():
ValueError: time data '02–MAY-21' does not match format '%d-%b-%y'
与此同时,我尝试了 unable to solve strptime() issue even after trying all the formats
中的代码from datetime import datetime
required_format="%d-%b-%y"
a = "02-MAY-21"
frmt = datetime.strptime(a,required_format)
print(frmt)
效果很好,这是结果 2021-05-02 00:00:00
我认为两者几乎相同,代码中几乎没有不同的部分,但它们甚至都无关紧要。
解决方法
您的原始字符串以 U+2013 EN DASH 字符作为分隔符:
>>> x ='02–MAY-21'
>>> hex(ord(x[2]))
8211
您正在尝试的格式字符串具有常规破折号 (U+002D)。
>>> f = '%d-%b-%y'
>>> hex(ord(f[2]))
'0x2d'
您可能希望将短划线标准化为常规破折号,并使用带有常规破折号的格式模式。
>>> datetime.strptime(x.replace("\u2013","-"),"%d-%b-%y")
datetime.datetime(2021,5,2,0)
>>>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。