【问题标题】:matching date format as string in python doesn't work as expected [duplicate]在python中将日期格式匹配为字符串不能按预期工作[重复]
【发布时间】:2018-01-18 15:39:53
【问题描述】:

作为一个更大的程序的一部分,我有 2 个函数,我想在下面强调一下:

def compare_date(date1,date2):
    date_tm_obj_url = datetime.strptime(date1, check_url_datefmt(date1))
    date_tm_obj_usr = datetime.strptime(date2, '%b %d %Y %I:%M %p')
    return (date_tm_obj_url > date_tm_obj_usr)

compare_date 旨在比较 2 个日期时间对象(日期)并检查哪个比另一个更新。其中一个日期是从网页中抓取出来的,另一个是从用户那里得到的(程序运行时,它会询问用户日期)

网页上的日期格式为Submitted Jan 15th 2018 11:03 PM by。但是为了管理1st2nd3rdnth 等情况的格式会有所不同的情况,我编写了另一个函数check_url_datefmt(date1)compare_date 调用:

def check_url_datefmt(date):
    print (str(date))
    fmt_lst=['Submitted %b %dst %Y %I:%M %p by','Submitted %b %dnd %Y %I:%M %p by','Submitted %b %drd %Y %I:%M %p by','Submitted %b %dth %Y %I:%M %p by']
    if str(date) == str(fmt_lst[0]):
        return 'Submitted %b %dst %Y %I:%M %p by'
    elif str(date) == str(fmt_lst[1]):
        return 'Submitted %b %dnd %Y %I:%M %p by'
    elif str(date) == str(fmt_lst[2]):
        return 'Submitted %b %drd %Y %I:%M %p by'
    else:
        return 'Submitted %b %dth %Y %I:%M %p by'

但我看到所有情况下,它只匹配最后一个else。事实上对于Submitted Jan 3rd 2018 11:03 PM by 的情况,它返回'Submitted %b %dth %Y %I:%M %p by',结果我得到这个错误:

File "C:\python-scripts\url_scraper1.py", line 65, in compare_date
date_tm_obj_url = datetime.strptime(date1, check_url_datefmt(date1))
  File "C:\Users\SIDDHARTHA\AppData\Local\Programs\Python\Python36-32\lib\_strptime.py", line 565, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
  File "C:\Users\SIDDHARTHA\AppData\Local\Programs\Python\Python36-32\lib\_strptime.py", line 362, in _strptime
(data_string, format))
ValueError: time data 'Submitted Jan 3rd 2018 11:03 PM by' does not match format 'Submitted %b %dth %Y %I:%M %p by'

我做错了什么?如何克服这个问题?

【问题讨论】:

  • 在解析之前从字符串中删除stndrdth怎么样?然后,您可以为所有字符串使用一个模板。
  • 您将Submitted Jan 3rd 2018 11:03 PM bySubmitted %b %dst %Y %I:%M %p by 进行比较,所以它们当然不相等,您总是属于else
  • @All 感谢您清除错误

标签: python date datetime


【解决方案1】:

check_url_datefmt(date) 无法按预期工作,因为date 是一个实际的日期字符串,因此与您尝试的任何日期格式字符串都不匹配。换句话说,字符串Submitted Jan 3rd 2018 11:03 PM byfmt_lst 中的任何字符串都不匹配。

最简单的解决方案是使用所有格式调用datetime.strptime(),直到其中一种格式匹配为止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多