web-dev-qa-db-fra.com

Comment savoir si une date se situe entre deux autres dates en Python?

J'ai les codes suivants:

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

date, début et fin sont toutes des variables au format 1/1. Que dois-je faire pour qu'il imprime le bon résultat? J'ai essayé la date en 10/2, en commençant en 3/14 et en terminant en 11/7 et c'est imprimé 'Non!', ce qui signifie qu'il ne fonctionne pas correctement. Je suppose que je dois les formater en un format de date, puis les comparer. Merci pour toute aide!

39
widget

Comme vous n'êtes toujours pas satisfait, j'ai une autre réponse pour vous. Sans utiliser datetime et year.

Il utilise simplement des tuples intégrés et les compare:

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

Vous pouvez facilement créer des Tuple comme ceux-ci:

day = 16
month = 4
d = (month, day)
39
Maciej Ziarko

Si vous convertissez toutes vos dates en datetime.date , vous pouvez écrire ce qui suit:

if start <= date <= end:
    print "in between"
else:
    print "No!"
73
Björn Pollex

Utilisation datetime.date:

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

< L'opérateur est surchargé spécialement pour vous.

date1 < date2 - la date1 est considérée comme inférieure à la date2 lorsque la date1 précède la date2 dans le temps.

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

Ou dans votre programme:

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!'
21
Maciej Ziarko
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'
2
Vishrut Jaipuria