Как определить, находится ли дата между двумя другими датами в Python? - PullRequest
39 голосов
/ 29 марта 2011

У меня есть следующие коды:

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

date, start и end - все переменные в формате 1/1.Что я должен сделать, чтобы распечатать правильный результат?я пробовал дату как 10/2, начиная с 3/14 и заканчивая как 11/7, и это напечатано «Нет!», что означает, что он работает неправильно.Я думаю, нужно отформатировать их в формате даты, а затем сравнить их.Спасибо за любую помощь!

Ответы [ 4 ]

73 голосов
/ 29 марта 2011

Если вы конвертируете все свои даты в datetime.date, вы можете написать следующее:

if start <= date <= end:
    print "in between"
else:
    print "No!"
38 голосов
/ 29 марта 2011

Поскольку вы все еще не удовлетворены, у меня есть для вас другой ответ.Без использования даты и времени.

Он просто использует встроенные кортежи и сравнивает их:

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)
20 голосов
/ 29 марта 2011

Использование datetime.date:

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

< оператор перегружен специально для вас.

date1 < date2 - дата1 считается меньше даты2, когда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!'
2 голосов
/ 12 августа 2016
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'
...