在python中将日期格式匹配为字符串并不按预期工作

时间:2018-01-18 15:39:54

标签: python date datetime

我有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) { {1}}来电:

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'

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

1 个答案:

答案 0 :(得分:1)

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

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