Comment calculer la différence de temps en Python



Lorsqu’on manipule des dates et des heures avec Python, il est fréquent de devoir déterminer l’écart temporel entre deux moments. Ce guide vous expliquera comment calculer cette différence, exprimée en heures, minutes et secondes.

À la fin de ce tutoriel, vous aurez acquis les compétences suivantes :

  • Utiliser le module datetime de Python pour gérer les dates et les heures.
  • Comprendre ce que sont les objets timedelta et leur utilité.
  • Calculer l’écart temporel entre deux points dans le temps, en heures, minutes et secondes.

Commençons sans plus tarder.

Maîtriser le Module datetime de Python

Pour interagir avec les dates et les heures en Python, vous utiliserez le module datetime. Ce module est intégré à la bibliothèque standard de Python, il n’est donc pas nécessaire de l’installer, il suffit de l’importer :

import datetime

Pour calculer un écart temporel, il faut définir deux moments distincts. Ces moments peuvent être:

  • Deux objets de type date.
  • Deux objets de type heure.
  • Une combinaison des deux, c’est-à-dire des objets de type datetime.

Création d’un Objet Date

Importons la classe date du module datetime. Pour créer un objet date, utilisez la syntaxe datetime.date(année, mois, jour). Par exemple, pour créer un objet date1 :

from datetime import date
date1 = datetime.date(2022, 3, 27)
print(date1)
# Résultat : 2022-03-27

Vous pouvez expérimenter ce code sur un interpréteur Python en ligne ou localement après avoir installé Python.

Comme le montre l’exemple, l’affichage d’une date respecte le format AAAA-MM-JJ.

Important : Assurez-vous que le mois est spécifié sous forme d’entier, sans zéro non significatif. Par exemple, pour le mois de juin, utilisez ‘6’ et non ’06’.

Si vous utilisez ’03’ au lieu de ‘3’ pour le mois de mars, une erreur de syntaxe sera levée, comme le montre l’exemple ci-dessous :

date1 = datetime.date(2022, 03, 27)
print(date1)
# Message d'erreur :
File "<ipython-input-12-6eb72084e6ce>", line 1
    date1 = datetime.date(2022,03,27)
                                ^
SyntaxError: invalid token

Voyons maintenant comment créer un objet de type heure.

Création d’un Objet Heure

Pour créer un objet heure, importons la classe time. On peut créer un objet heure en utilisant la classe time et en spécifiant les attributs heure, minute, seconde et microseconde.

Ces attributs sont optionnels. Si un attribut n’est pas spécifié, il prend la valeur 0 par défaut.

L’exemple suivant montre la création d’un objet time1. Comme pour la date, l’objet heure sera formaté lors de l’affichage :

from datetime import time
time1 = datetime.time(13, 27, 45, 4600)
print(time1)
# Résultat : 13:27:45.004600

Création d’un Objet Datetime

L’objet date ne contient pas d’information sur l’heure, et l’objet heure n’inclut pas la date. En pratique, il est souvent nécessaire d’avoir les deux informations. L’objet datetime est donc à privilégier.

Voici comment accéder à la classe datetime et créer des objets de ce type :

dt1 = datetime.datetime(2022, 3, 27, 13, 27, 45, 46000)
print(dt1)
# Résultat : 2022-03-27 13:27:45.046000

Créons maintenant un autre objet datetime, dt2, sans spécifier l’attribut seconde. On constate que la valeur par défaut (0) est utilisée :

dt2 = datetime.datetime(2022, 6, 30, 14, 28)
print(dt2)
# Résultat : 2022-06-30 14:28:00

Jusqu’à présent, nous avons vu comment créer des moments sous différentes formes. Il est temps d’apprendre à calculer la différence entre deux de ces moments.

La section suivante vous apportera les réponses.

L’Objet timedelta de Python

En Python, timedelta représente un laps de temps. Il s’agit de la différence entre deux objets date, heure ou datetime.

L’addition ou la soustraction de deux objets date, heure ou datetime a pour résultat un objet timedelta. Cet objet possède des attributs et des méthodes qui facilitent le calcul des différences de temps.

Calculons par exemple la différence entre dt1 et dt2 :

dt1 = datetime.datetime(2022, 3, 27, 13, 27, 45, 46000)
dt2 = datetime.datetime(2022, 6, 30, 14, 28)
tdelta = dt2 - dt1
print(tdelta)
print(type(tdelta))
# Résultat :
95 days, 1:00:14.954000
<class 'datetime.timedelta'>

On observe que la variable tdelta contient la différence temporelle entre dt1 et dt2. La fonction type() confirme que le type de tdelta est bien datetime.timedelta.

Voyons un autre exemple plus concret.

Calcul d’un Écart Temporel entre Deux Dates

Prenons un exemple pratique et parlant.

Problématique : Calculer l’écart temporel entre la date actuelle et votre anniversaire.
Pour ce faire, définissons la date actuelle comme premier moment et votre date d’anniversaire comme second.

Créons deux objets datetime :

  • Un pour la date d’aujourd’hui, que nous nommerons today.
  • Un pour votre date d’anniversaire, que nous nommerons bday.

La méthode now() de la classe datetime retourne la date et l’heure locale actuelle. C’est cette fonction que nous allons utiliser pour définir la date de référence today :

today = datetime.datetime.now()
print(today)
# Exemple de résultat : 2022-01-22 09:10:18.489538

Dans l’exemple ci-dessous, remplacez la variable bday par votre date d’anniversaire pour calculer le temps restant avant celui-ci cette année.

Si votre anniversaire est déjà passé, vous pouvez modifier bday pour l’année suivante.

bday = datetime.datetime(2022, 8, 30, 11, 59)
print(bday)
# Exemple de résultat : 2022-08-30 11:59:00

L’étape suivante consiste à calculer time_diff, qui est un objet timedelta. Il suffit de soustraire today de bday pour obtenir l’écart temporel :

time_diff = bday - today
print(f"Votre anniversaire est dans {time_diff}")
# Résultat
Votre anniversaire est dans 220 days, 2:46:00.127416

Pour connaître le nombre de jours restants, utilisez l’attribut days sur time_diff :

tdays = time_diff.days
print(f"Votre anniversaire est dans {tdays} jours.")
# Résultat
Votre anniversaire est dans 220 jours.

Calcul d’un Écart Temporel en Secondes

Calculons maintenant le temps restant jusqu’à votre anniversaire en secondes.

Pour obtenir la différence de temps totale en secondes, utilisez la méthode total_seconds() sur l’objet timedelta time_diff :

tsecs = time_diff.total_seconds()
print(f"Votre anniversaire est dans {tsecs} secondes.")
# Résultat
Votre anniversaire est dans 19017960.127416 secondes.

Voilà, l’attente est longue !

Vous savez maintenant comment calculer l’écart temporel entre deux moments en secondes.

Rappelons quelques bases : une journée compte 24 heures, une heure dure 60 minutes, et une minute est composée de 60 secondes.

Voici un résumé visuel :

Heures, minutes et secondes

Pour convertir les secondes en minutes, heures et jours, utilisez le tableau suivant et divisez par le facteur de conversion approprié.

Tableau de conversion du temps

Dans les sections suivantes, nous allons convertir l’écart temporel en secondes vers les minutes puis les heures.

Calcul de l’Écart Temporel en Minutes

Pour obtenir l’écart temporel en minutes, il suffit de diviser le nombre total de secondes par 60.

Divisons tsecs par 60 et stockons le résultat dans une variable nommée tmins :

tmins = tsecs/60
print(f"Votre anniversaire est dans {tmins} minutes.")
# Résultat
Votre anniversaire est dans 316966.0021236 minutes.

Calcul de l’Écart Temporel en Heures

Maintenant que vous connaissez l’écart en minutes, vous pouvez le diviser par 60 pour obtenir l’écart en heures. Ou, vous pouvez directement diviser le nombre total de secondes par 60*60 = 3600.

thrs = tsecs/(60*60)
print(f"Votre anniversaire est dans {thrs} heures.")
# Résultat
Votre anniversaire est dans 5282.76670206 heures.

Vous savez maintenant comment calculer un écart temporel dans l’unité de votre choix.

Conclusion

Dans ce tutoriel, vous avez appris à :

  • Créer et manipuler des dates et des heures à l’aide du module datetime de Python.
  • Utiliser les objets timedelta pour représenter un laps de temps.
  • Calculer l’écart temporel en secondes, minutes et heures.

J’espère que ce tutoriel vous a été utile. Vous maîtrisez désormais le calcul d’un écart temporel en Python. Il est temps de mettre vos compétences en pratique.

Bon apprentissage et bon code !

Apprenez à écrire du code « égal à » ou « différent de », ou encore à créer un jeu de serpent en Python ici.