如何判断日期是否在Python中的其他两个日期之间?

时间:2011-03-28 20:01:09

标签: python compare date

我有以下代码:

if date in (start, end):
        print 'in between'
else:
        print 'No!'

日期,开始和结束都是格式为1/1的变量。我该怎么做才能打印出正确的结果呢?我尝试将日期定为10/2,以3/14开始并以11/7结束并打印“否!”,这意味着它没有正确运行。我想必须将它们格式化为日期格式然后进行比较。谢谢你的帮助!

4 个答案:

答案 0 :(得分:70)

如果您将所有日期转换为datetime.date,则可以写下以下内容:

if start <= date <= end:
    print "in between"
else:
    print "No!"

答案 1 :(得分:38)

由于您仍然不满意,我还有另一个答案。不使用日期时间和年份。

它只使用内置元组并进行比较:

d1 = (3, 28)
d2 = (3, 31)
d3 = (4, 2)
if d1 < d2 < d3:
    print("BETWEEN!")
else:
    print("NOT!")

您可以轻松创建这样的元组:

day = 16
month = 4
d = (month, day)

答案 2 :(得分:19)

使用datetime.date

http://docs.python.org/library/datetime.html#datetime.date

<运算符专门为您重载。

date1 < date2 - 当date1在date2之前时,date1被认为小于date2。

>>> from datetime import date
>>> d1 = date(2011, 3, 28)
>>> d2 = date(2011, 3, 22)
>>> d3 = date(2011, 4, 3)
>>> d2 < d1 < d3
True

或者在你的程序中:

from datetime import date

d1 = date(2011, 3, 28)
d2 = date(2011, 3, 22)
d3 = date(2011, 4, 3)

if d2 < d1 < d3:
    print 'in between'
else:
    print 'No!'

答案 3 :(得分:2)

from datetime import datetime

date_format = "%m/%d/%Y"

a = datetime.strptime('8/18/2008', date_format)

b = datetime.strptime('9/26/2007', date_format) # Date to be checked

c = datetime.strptime('9/25/2008', date_format)

d = datetime.strptime('8/18/2008', date_format)  #Date entered here should always be the same as 'a'

delta1 = b - a

delta2 = c - b

delta3 = d - a

if delta1.days >= delta3.days and delta2.days >= delta3.days:

    print 'In between'

else:

    print 'Not in between'