443 votes

Comment comparer deux dates ?

Comment comparer deux dates pour voir laquelle est la plus tardive, en utilisant Python ?

Par exemple, je veux vérifier si la date du jour est postérieure à la dernière date de la liste des dates de vacances que je suis en train de créer, afin d'envoyer automatiquement un e-mail indiquant à l'administrateur de mettre à jour le fichier holiday.txt.

23 votes

Er, vous utilisez le < y > comme pour toute autre comparaison.

12 votes

@JohnMachin : vous écrivez une fonction avec un prototype int compare_dates(void const *, void const*) les deux arguments sont convertis en struct Date * et mettre en œuvre la logique de comparaison. Cela peut ne pas être aussi évident pour un nouveau venu dans Python.

1 votes

@larsmans : Désolé .... s/any_language/any_reasonable_language/ et toute personne habituée à un langage déraisonnable devrait passer quelques minutes à parcourir la docs et à essayer date1 < date2.

563voto

larsmans Points 167484

Utilisez le datetime et l'opérateur < et ses proches.

>>> from datetime import datetime, timedelta
>>> past = datetime.now() - timedelta(days=1)
>>> present = datetime.now()
>>> past < present
True
>>> datetime(3000, 1, 1) < present
False
>>> present - datetime(2000, 4, 4)
datetime.timedelta(4242, 75703, 762105)

22 votes

Cela fonctionne également pour les valeurs tenant compte du fuseau horaire, si quelqu'un se posait la question.

2 votes

Quelle est la différence entre past y present ? Je ne comprends pas votre exemple et son résultat n'a pas de sens.

19 votes

@Emadpres : imaginez que cela a été tapé manuellement. La ligne passée a été tapée en premier, tandis que la ligne présente a été tapée en second... donc la ligne passée a été saisie en premier, donc passé < présent est Vrai.

89voto

Guillermo Pereira Points 1441

Utilisez time

Disons que vous avez les dates initiales sous forme de chaînes de caractères comme celles-ci :
date1 = "31/12/2015"
date2 = "01/01/2016"

Vous pouvez procéder comme suit :
newdate1 = time.strptime(date1, "%d/%m/%Y") et newdate2 = time.strptime(date2, "%d/%m/%Y") pour les convertir au format de date de python. Ensuite, la comparaison est évidente :

newdate1 > newdate2 retournera False
newdate1 < newdate2 retournera True

0 votes

Juste faire... import time avant le code ci-dessus :)

44voto

Daniel Nill Points 1491

datetime.date(2011, 1, 1) < datetime.date(2011, 1, 2) retournera True .

datetime.date(2011, 1, 1) - datetime.date(2011, 1, 2) retournera datetime.timedelta(-1) .

datetime.date(2011, 1, 1) + datetime.date(2011, 1, 2) retournera datetime.timedelta(1) .

voir le docs .

5voto

Luis Points 1193

Autres réponses utilisant datetime et les comparaisons fonctionnent également pour le temps seulement, sans date.

Par exemple, pour vérifier si, à l'heure actuelle, il est plus ou moins de 8 heures du matin, nous pouvons utiliser :

import datetime

eight_am = datetime.time( 8,0,0 ) # Time, without a date

Et comparer ensuite avec :

datetime.datetime.now().time() > eight_am  

qui renverra True

1voto

Avec python comme langage le plus simple disponible, il est assez facile de comparer des dates en python les opérateurs python < , > et == s'adaptent merveilleusement aux objets datetime. Chacun d'entre eux a sa propre signification en python :

  • > signifie que la date est antérieure à la première
  • < signifie que la date arrive plus tard
  • == signifie que la date est la même que la première Donc, pour votre cas :

    import datetime

    date = datetime.datetime(2000, 1, 1) # Replace with whatever you want now = datetime.datetime.now() # You can even find the current date and time using this expression

    if date < now: print('past') elif date > now: print('future') else: print('present')

    This would print "past"

1 votes

Les autres réponses postées couvrent déjà le cas. Mieux vaut chercher de nouvelles questions pour contribuer au site.

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