我需要帮助比较两个日期(字符串)的python函数,如果date1比date2更早,则返回True。这是我的代码,但我不知道为什么它为测试用例返回True(“2013/10/24”,“2013/9/24”)
# str, str -> boolean
def dateLessThan(date1,date2):
date1 = date1.split('/')
date2 = date2.split('/')
if date1[0] < date2[0]:
return True
elif date1[0] == date2[0] and date1[1] < date2[1]:
return True
elif date1[0] == date2[0] and date1[1] == date2[1] and date1[2] < date2[2]:
return True
else:
return False
答案 0 :(得分:2)
考虑使用datetime objects(假设您的时间格式为YY / mm / dd)
from datetime import datetime
def dateLessThan(date1,date2):
datetime1 = datetime.strptime(date1, '%Y/%m/%d')
datetime2 = datetime.strptime(date2, '%Y/%m/%d')
return datetime1 < datetime2
答案 1 :(得分:1)
只需使用datetime.strptime
类方法,而不是自己进行解析。
def dateLessThan(date1,date2):
date1 = datetime.datetime.strptime(date1, "%Y/%m/%d")
date2 = datetime.datetime.strptime(date2, "%Y/%m/%d")
return date1 < date2
答案 2 :(得分:1)
由于字符串的字典比较,您的测试失败了。 "10" < "9"
。
不使用datetime
或time
解析(当有复杂的格式,月份名称......时需要),可以做一些简单的事情,因为那里有只涉及数字(并且您有年/月/日,因此您接近ISO日期格式,您可以按字典顺序进行比较)。
只需将值映射为整数并转换为列表,然后让列表的自然/词典顺序完成剩下的工作:
def dateLessThan(date1,date2):
return [int(x) for x in date1.split('/')] < [int(x) for x in date2.split('/')]