大于'date'python 3

时间:2013-07-05 09:31:24

标签: python python-3.x

我希望能够做出比日期更重要的事情。我该怎么做呢?例如:

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。我想我需要让系统认识到这是一个约会,我不知道该怎么做。有人可以帮忙吗?

由于

4 个答案:

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

How to compare two dates?

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

这样做的好处是简单(至少对我来说)和性能,因为它可以节省字符串到日期(可能还有)的转换,同时仍可靠地比较日期。在我使用的程序中,我也比较了很多日期。由于我从文件中获取日期始终是字符串,因为性能是我的程序的一个问题,我通常喜欢以这种方式将日期作为字符串进行比较。

当然这意味着您必须将日期转换为其他格式,但如果这是一次性操作,则值得付出努力...... :)