Le module datetime en Python offre des outils puissants pour gérer les dates et les heures. Cette bibliothèque est essentielle pour créer des rapports, faire de l'analyse de données, planifier des événements et traiter des horodatages dans tous vos projets logiciels.
Les bases du module datetime
Importation et classes principales
Le module datetime fait partie de la bibliothèque standard de Python et ne nécessite aucune installation supplémentaire :
import datetime
from datetime import date, time, datetime, timedelta, timezone
Les classes principales du module :
- datetime.date — gestion des dates (année, mois, jour)
- datetime.time — gestion des heures (heures, minutes, secondes)
- datetime.datetime — combine date et heure
- datetime.timedelta — représente la différence entre deux dates/heures
- datetime.timezone — gestion des fuseaux horaires
Obtenir la date et l'heure actuelles
from datetime import datetime, date
# Date et heure actuelles
now = datetime.now()
print(f"Date et heure actuelles : {now}")
# Date actuelle uniquement
today = date.today()
print(f"Date d'aujourd'hui : {today}")
Créer et manipuler des dates
Création manuelle de dates
from datetime import date, datetime
# Création d'une date spécifique
custom_date = date(2025, 5, 9)
print(f"Date définie : {custom_date}")
# Création d'une date et heure
custom_datetime = datetime(2025, 5, 9, 14, 30, 45)
print(f"Date et heure définies : {custom_datetime}")
Extraire les composants d'une date
today = date.today()
print(f"Année : {today.year}")
print(f"Mois : {today.month}")
print(f"Jour : {today.day}")
print(f"Jour de la semaine : {today.weekday()}") # 0 = lundi, 6 = dimanche
Travailler avec le temps
Création et manipulation d'objets time
from datetime import time
# Création d'une heure
custom_time = time(14, 30, 45)
print(f"Heure définie : {custom_time}")
# Extraction des composants de l'heure
print(f"Heures : {custom_time.hour}")
print(f"Minutes : {custom_time.minute}")
print(f"Secondes : {custom_time.second}")
Obtenir l'heure avec les microsecondes
from datetime import datetime
now = datetime.now()
print(f"Heure avec microsecondes : {now}")
print(f"Microsecondes : {now.microsecond}")
Opérations arithmétiques sur les dates
Utilisation de timedelta
from datetime import date, datetime, timedelta
# Opérations sur les dates
today = date.today()
tomorrow = today + timedelta(days=1)
last_week = today - timedelta(weeks=1)
next_month = today + timedelta(days=30)
print(f"Demain : {tomorrow}")
print(f"Il y a une semaine : {last_week}")
print(f"Dans un mois : {next_month}")
# Opérations plus complexes
future_date = today + timedelta(days=100, hours=5, minutes=30)
print(f"Dans 100 jours, 5 heures et 30 minutes : {future_date}")
Calcul de la différence entre deux dates
from datetime import date, datetime
start_date = date(2025, 1, 1)
end_date = date(2025, 12, 31)
# Différence en jours
difference = end_date - start_date
print(f"Différence en jours : {difference.days}")
# Différence en secondes pour datetime
start_time = datetime(2025, 5, 9, 10, 0, 0)
end_time = datetime(2025, 5, 9, 15, 30, 45)
time_diff = end_time - start_time
print(f"Différence en secondes : {time_diff.total_seconds()}")
print(f"Différence en heures : {time_diff.total_seconds() / 3600}")
Formatage des dates et heures
La méthode strftime
from datetime import datetime
now = datetime.now()
# Différents formats
print(now.strftime("%d/%m/%Y")) # 09/05/2025
print(now.strftime("%A %d %B %Y")) # vendredi 09 mai 2025
print(now.strftime("%H:%M:%S")) # 14:30:45
print(now.strftime("%Y-%m-%d %H:%M:%S")) # 2025-05-09 14:30:45
Analyse de chaînes avec strptime
from datetime import datetime
# Conversion d'une chaîne en objet datetime
date_string = "09/05/2025 14:30:45"
parsed_date = datetime.strptime(date_string, "%d/%m/%Y %H:%M:%S")
print(f"Date parsée : {parsed_date}")
# Autres formats courants
date_string2 = "2025-05-09"
parsed_date2 = datetime.strptime(date_string2, "%Y-%m-%d")
print(f"Date parsée (format ISO) : {parsed_date2}")
Gestion des fuseaux horaires
Utilisation de timezone
from datetime import datetime, timezone, timedelta
# Création d'un fuseau horaire
paris_tz = timezone(timedelta(hours=2)) # UTC+2 (heure d'été)
new_york_tz = timezone(timedelta(hours=-4)) # UTC-4 (heure d'été)
# Date avec fuseau horaire
paris_time = datetime.now(paris_tz)
new_york_time = datetime.now(new_york_tz)
print(f"Heure à Paris : {paris_time}")
print(f"Heure à New York : {new_york_time}")
Conversion entre fuseaux horaires
from datetime import datetime, timezone, timedelta
# Création d'une date en UTC
utc_time = datetime.now(timezone.utc)
print(f"Heure UTC : {utc_time}")
# Conversion vers un autre fuseau
tokyo_tz = timezone(timedelta(hours=9)) # UTC+9
tokyo_time = utc_time.astimezone(tokyo_tz)
print(f"Heure à Tokyo : {tokyo_time}")
Exemples pratiques
Calcul de l'âge
from datetime import date
def calculate_age(birth_date):
today = date.today()
age = today.year - birth_date.year
# Vérification si l'anniversaire est déjà passé cette année
if (today.month, today.day) < (birth_date.month, birth_date.day):
age -= 1
return age
birthday = date(1990, 5, 15)
print(f"Âge : {calculate_age(birthday)} ans")
Vérification de la validité d'une date
from datetime import datetime
def is_valid_date(date_string, format="%Y-%m-%d"):
try:
datetime.strptime(date_string, format)
return True
except ValueError:
return False
print(is_valid_date("2025-05-09")) # True
print(is_valid_date("2025-13-01")) # False (mois invalide)
Planificateur de tâches simple
from datetime import datetime, timedelta
def schedule_task(days_from_now=0, hours=0, minutes=0):
now = datetime.now()
scheduled_time = now + timedelta(
days=days_from_now,
hours=hours,
minutes=minutes
)
return scheduled_time
# Planifier une tâche dans 3 jours à 2 heures
task_time = schedule_task(days_from_now=3, hours=2)
print(f"Tâche planifiée pour : {task_time}")
Bonnes pratiques et astuces
- Utilisez toujours des fuseaux horaires explicites dans les applications internationales
- Stockez les dates en UTC dans la base de données et convertissez-les localement
- Préférez les objets datetime aux chaînes de caractères pour les calculs
- Utilisez des bibliothèques externes comme
pytzoudateutilpour une gestion avancée des fuseaux horaires - Testez toujours les cas limites : années bissextiles, changement d'heure, etc.
Conclusion
Le module datetime de Python est un outil indispensable pour tout développeur. Avec les classes date, time, datetime, timedelta et timezone, vous pouvez gérer efficacement tous les aspects temporels de vos applications. La maîtrise du formatage avec strftime et strptime vous permettra d'interagir facilement avec les bases de données et les interfaces utilisateur.
Pour aller plus loin, explorez des bibliothèques comme pytz pour une gestion complète des fuseaux horaires, ou dateutil pour des fonctionnalités avancées de parsing et de calcul de dates.