Travailler avec les dates en datetime Python

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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 pytz ou dateutil pour 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.

Blogs

Book Recommendations