HOWTO · Python
Comparer deux dates en Python
Ce tutoriel montre comment comparer deux dates et vérifier laquelle est la plus grande en Python.
Sur cette page
Utilisez les opérateurs de comparaison de Python lorsque les deux valeurs sont de types compatibles. Une comparaison de date ordonne les jours du calendrier ; une comparaison de datetime tient également compte de l’heure. Il n’est pas possible d’ordonner directement une valeur date et une valeur datetime : comparez des valeurs de même type ou convertissez volontairement les deux dans une représentation commune. Analysez les chaînes avant de les comparer, et soustrayez des valeurs date-heure lorsque vous avez besoin de mesurer un intervalle écoulé. Dans un système de réservation, par exemple, comparez les dates demandées et réservées pour déterminer leur ordre ou repérer des conflits.
Comparer des objets date avec des opérateurs de comparaison
Importez la classe date du module datetime pour comparer des dates calendaires sans tenir compte de l’heure. Les opérateurs <, >, <=, >=, == et != comparent l’année, le mois et le jour dans l’ordre chronologique. Par exemple, le 29 juin est après le 9 juin ; l’expression booléenne demande à Python de vérifier cet ordre.
Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from datetime import date
start = date(2023, 6, 9)
end = date(2023, 6, 29)
print(end > start)
True
L’exemple affiche True, ce qui indique que le 29 juin est après le 9 juin. Utilisez date lorsque seul le jour du calendrier compte, par exemple pour vérifier si une échéance est dépassée. Les deux opérandes doivent être des valeurs date. N’ordonnez pas directement une valeur date par rapport à une valeur datetime : Python exige des types d’opérandes compatibles pour l’ordonnancement. Comparez des valeurs de même type ou convertissez volontairement les deux dans une représentation commune. Une chaîne comme "2023-06-29" n’est pas convertie automatiquement lors d’une comparaison.
Comparer des objets datetime lorsque l’heure compte
Utilisez la classe datetime lorsque l’heure de la journée doit influer sur le résultat. La comparaison tient compte des champs de date et d’heure : deux valeurs du même jour calendaire peuvent donc être ordonnées selon l’heure, les minutes et les unités plus petites. Les valeurs suivantes correspondent au même jour, mais 16 h 30 est après 9 h.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from datetime import datetime
morning = datetime(2023, 6, 29, 9, 0)
afternoon = datetime(2023, 6, 29, 16, 30)
print(afternoon > morning)
True
L’exemple affiche True. Les valeurs datetime naïves (sans information de fuseau horaire) peuvent être comparées à d’autres valeurs naïves. Pour les valeurs avec fuseau horaire, utilisez des informations de fuseau compatibles. Python n’autorise pas l’ordonnancement d’une valeur datetime naïve par rapport à une valeur avec fuseau horaire ; normalisez les valeurs selon une même règle de fuseau horaire avant de les comparer. Choisissez plutôt date si des heures différentes le même jour doivent être considérées comme égales.
Analyser des chaînes de date avec time.strptime()
Les dates exprimées en texte doivent suivre un format connu avant d’être comparées. La fonction time.strptime() analyse une chaîne selon un format et renvoie un struct_time ; les tuples obtenus peuvent ensuite être comparés dans l’ordre chronologique. Le format ci-dessous correspond à une entrée jour/mois/année : %d/%m/%Y interprète donc 30/11/2020 comme le 30 novembre 2020.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
import time
first_text = "30/11/2020"
second_text = "12/10/2019"
first_date = time.strptime(first_text, "%d/%m/%Y")
second_date = time.strptime(second_text, "%d/%m/%Y")
print(first_date > second_date)
True
L’exemple affiche True : d’après les champs année, mois et jour, la première date analysée est postérieure à la seconde. Faites correspondre exactement la chaîne de format aux données saisies : %m/%d/%Y indiquerait un ordre différent. Ne comparez pas directement des chaînes de date pour déterminer l’ordre chronologique, car l’ordre des caractères peut différer de celui du calendrier. Si le format des entrées peut varier ou si vous devez gérer les fuseaux horaires, analysez-les plutôt dans une représentation datetime adaptée.
Utiliser timedelta pour comparer des intervalles entre dates
La soustraction de deux valeurs date, ou de deux valeurs datetime compatibles, produit un timedelta. Il s’agit d’un intervalle écoulé, et non d’une date. Comparez-le à un autre timedelta pour savoir si suffisamment de temps s’est écoulé ; utilisez les opérateurs de comparaison sur les dates d’origine pour déterminer laquelle vient en premier.
Le code et les libellés ou sorties affichés dans cette section restent en anglais.
from datetime import date, timedelta
start = date(2023, 6, 9)
end = date(2023, 6, 29)
elapsed = end - start
print(elapsed > timedelta(days=7))
True
L’exemple affiche True. La soustraction produit un intervalle de 20 jours, supérieur au seuil de sept jours. timedelta accepte des unités comme les jours, les secondes, les minutes, les heures et les semaines ; il représente une durée et ne tient pas compte des mois ou des années calendaires, dont la longueur varie. Pour calculer un intervalle entre des valeurs datetime, vérifiez que les deux valeurs respectent les mêmes règles de fuseau horaire et de présence de fuseau.