我希望能够做出比日期更重要的事情。我该怎么做呢?例如:
date1 = "20/06/2013"
date2 = "25/06/2013"
date3 = "01/07/2013"
date4 = "07/07/2013"
datelist = [date1, date2, date3]
for j in datelist:
if j <= date4:
print j
如果我运行上面的命令,我会返回date3而不是date1或date2。我想我需要让系统认识到这是一个约会,我不知道该怎么做。有人可以帮忙吗?
由于
答案 0 :(得分:6)
您可以使用datetime
模块将它们全部转换为datetime对象。您正在比较示例中的字符串:
>>> from datetime import datetime
>>> date1 = datetime.strptime(date1, "%d/%m/%Y")
>>> date2 = datetime.strptime(date2, "%d/%m/%Y")
>>> date3 = datetime.strptime(date3, "%d/%m/%Y")
>>> date4 = datetime.strptime(date4, "%d/%m/%Y")
>>> datelist = [date1, date2, date3]
>>> for j in datelist:
... if j <= date4:
... print(j.strftime('%d/%m/%Y'))
...
20/06/2013
25/06/2013
01/07/2013
答案 1 :(得分:2)
您正在比较字符串,而不是日期。您应该使用基于日期的对象类型,例如datetime。
答案 2 :(得分:1)
您可以使用日期时间模块:
>>> from datetime import datetime
>>> d = datetime.strptime(date4, '%d/%m/%Y')
>>> for j in datelist:
... d1 = datetime.strptime(j, '%d/%m/%Y')
... if d1 <= d:
... print j
...
20/06/2013
25/06/2013
01/07/2013
答案 3 :(得分:0)
比较的问题是字符串比较首先比较第一个字符,然后是第二个字符,第三个字符,依此类推。您当然可以将字符串转换为日期,就像其他答案所示,但也有不同的解决方案。
为了将日期作为字符串进行比较,您需要使用不同的格式,例如:'yyyy-mm-dd'。通过这种方式,它首先比较年份,月份和最后一天:
>>> d1 = '2012-10-11'
>>> d2 = '2012-10-12'
>>> if d2 > d1:
... print('this works!')
this works!
这样做的好处是简单(至少对我来说)和性能,因为它可以节省字符串到日期(可能还有)的转换,同时仍可靠地比较日期。在我使用的程序中,我也比较了很多日期。由于我从文件中获取日期始终是字符串,因为性能是我的程序的一个问题,我通常喜欢以这种方式将日期作为字符串进行比较。
当然这意味着您必须将日期转换为其他格式,但如果这是一次性操作,则值得付出努力...... :)