【问题标题】:ValueError: time data '02/03/2022' does not match format '%d/%m/%y 'ValueError: 时间数据 \'02/03/2022\' 与格式 \'%d/%m/%y \' 不匹配
【发布时间】:2023-02-26 07:30:56
【问题描述】:

How to return values only within a specific date range?

我是 python 新手

我的代码是:

for report_date in REPORT_DATE_TYPES:
    if report_date in result:
        date = result[report_date].split(' ')[0]
        date = datetime.strptime(date, '%d/%m/%y ')

但我收到一个错误:

raise ValueError("time data %r does not match format %r" %
ValueError: time data '02/03/2022' does not match format '%d/%m/%y '

如何解决这个问题?

【问题讨论】:

  • %y 是 2 位数年份,%Y 是 4 位数年份。另外,格式字符串中有空格,date是否以空格结尾?
  • 4 位数年份是 %Y 而不是 %y

标签: python datetime valueerror


【解决方案1】:

要指出您需要使用 %Y 的年份,并且在您提供的格式末尾还有一个额外的空间,它不存在于日期中。试试date = datetime.strptime(date, '%d/%m/%Y')

【讨论】:

  • 谢谢你的工作,我可以使用 : if date < last_date 仅当日期小于 last_date 时才运行操作。
  • 我已经发布了一个关于此的问题:*.com/questions/71067054/…。我已经坚持了一天多了。
  • 将它们转换为日期时间后,您可以将它们与经典比较运算符进行比较。我也会看看你发布的其他问题
  • 太感谢了!
  • 您可以刷新页面,因为我已经更改了代码。
【解决方案2】:

%y 仅指年份的最后 2 位数字,而不是示例中的整年。

20/03/21 的格式为 '%d/%m/%y20/03/2021 的格式为'%d/%m/%Y(注意大写Y)因此您只需更新代码如下

for report_date in REPORT_DATE_TYPES:
   if report_date in result:
       date = result[report_date].split(' ')[0]
       date = datetime.strptime(date, '%d/%m/%Y ')

你可以找到每个标志的有用表格on this link

【讨论】:

    【解决方案3】:

    此错误表示格式和输入未对齐。 在此示例中,输入:'02/03/2022', 与格式“%d/%m/%y”不匹配

    为什么? 因为 %y 是有两个字母的年份,例如“22”而不是“2022”。 顺便说一句,输入的其余部分确实与格式匹配。

    使用此链接验证格式是否正确: https://www.geeksforgeeks.org/python-datetime-strptime-function/

    【讨论】: