61 votes

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

J'ai les codes suivants :

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

La date, le début et la fin sont tous des variables avec le format 1/1. J'ai essayé d'imprimer la date 10/2, le début 3/14 et la fin 11/7 et j'ai obtenu 'Non!', ce qui signifie que le programme ne fonctionne pas correctement. Je suppose qu'il faut les formater au format date et ensuite les comparer.

1 votes

Qu'avez-vous essayé d'autre ? Si cela ne fonctionne pas, quel autre code pensez-vous pouvoir utiliser ? Avez-vous lu des articles sur < y > dans un tutoriel ?

0 votes

J'ai également utilisé start < date < end, et j'ai essayé d'utiliser : from datetime import date. Le problème est que je veux juste les comparer dans le format mois/date puisque je les ai dans la même année. Dois-je obtenir le mois et la date séparément de month/date et ensuite les formater tous ensemble pour les comparer ?

0 votes

@widget : "Toujours en panne" ? Veuillez fournir un exemple concret de ce que vous entendez par "fonctionne mal". "Dois-je récupérer le mois et la date séparément de month/date". Non.

135voto

Björn Pollex Points 41424

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!")

3 votes

Je ne sais pas pourquoi ce n'est pas la réponse choisie, mais merci pour cela !

0 votes

Super, vous avez aussi ajouté le test d'égalité.

53voto

Maciej Ziarko Points 3236

Comme vous n'êtes toujours pas satisfait, j'ai une autre réponse pour vous. Sans utiliser de date et d'année.

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 créer facilement des tuple comme ceux-ci :

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

0 votes

Je pense que c'est exactement ce que je veux. Je les ai convertis en int et ajoutés au tuple. cela fonctionne très bien ! Merci beaucoup !

0 votes

N'oubliez pas que de cette façon, vous ne pouvez pas être sûr qu'il s'agit de vraies dates. Mais si vous n'avez affaire qu'à des dates réelles, c'est probablement la méthode la plus efficace et la plus simple.

0 votes

J'ai obtenu les données de date à partir de ma table, ce sont donc de vraies dates. Oui, j'aime cette méthode de comparaison, elle est efficace.

38voto

Maciej Ziarko Points 3236

Utilisez 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!')

0 votes

Vos codes me semblent corrects. maintenant je suppose que je devrais obtenir les enregistrements de l'année, du mois et de la date séparément. je ne pense pas que ce soit nécessaire cependant.

1 votes

Je vais écrire pour vous la réponse sans année et sans date. Accordez-moi seulement 2 minutes.

0 votes

J'ai écrit une autre réponse. Vérifie-la !

3voto

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')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X