3

我希望能够比日期做得更多和更少。我该怎么做呢?例如:

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

4 回答 4

7

您可以使用该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
于 2013-07-05T09:36:07.957 回答
2

您正在比较字符串,而不是日期。您应该使用基于日期的对象类型,例如datetime

如何比较两个日期?

于 2013-07-05T09:36:33.037 回答
1

您可以使用 datetime 模块:

>>> 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
于 2013-07-05T09:35:15.333 回答
0

您比较的问题是字符串比较首先比较第一个字符,然后是第二个字符,然后是第三个字符,依此类推。您当然可以将字符串转换为日期,就像其他答案所建议的那样,但也有不同的解决方案。

为了将日期作为字符串进行比较,您需要使用不同的格式,例如:'yyyy-mm-dd'。通过这种方式,它首先比较年份,然后是月份,最后是日期:

>>> d1 = '2012-10-11'
>>> d2 = '2012-10-12'
>>> if d2 > d1:
...     print('this works!')
this works!

这样做的好处是简单(至少对我而言)和性能,因为它保存了字符串到日期的转换(可能还保存),同时仍然可靠地比较日期。在我使用的程序中,我也经常比较日期。因为我从文件中获取日期,所以它总是以字符串开头,并且因为性能是我的程序的一个问题,我通常喜欢以这种方式将日期作为字符串进行比较。

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

于 2013-07-05T10:33:43.630 回答