比较Python中的日期字符串

时间:2017-10-26 20:49:47

标签: python python-3.x

我需要帮助比较两个日期(字符串)的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

3 个答案:

答案 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"

不使用datetimetime解析(当有复杂的格式,月份名称......时需要),可以做一些简单的事情,因为那里有只涉及数字(并且您有年/月/日,因此您接近ISO日期格式,您可以按字典顺序进行比较)。

只需将值映射为整数并转换为列表,然后让列表的自然/词典顺序完成剩下的工作:

def dateLessThan(date1,date2):
   return [int(x) for x in date1.split('/')] < [int(x) for x in date2.split('/')]