Menu
Français

Python datetime : dates, heures, timedeltas et fuseaux horaires

Un tour pratique du module datetime de Python — parser, formater, faire des maths sur les dates et gérer les fuseaux horaires sans se perdre.

Les deux types principaux : date et datetime

Le module datetime te donne quatre choses à connaître : date, time, datetime et timedelta. Les trois premiers sont ce à quoi ils ressemblent ; le quatrième est une durée.

main.py
Output
Click Run to see the output here.

Un date représente un jour — année, mois, jour — sans horloge attachée. Un datetime est une date plus une heure. Si tu n'as pas besoin de l'horloge, date est le choix plus propre.

Créer des dates spécifiques

Construis directement :

main.py
Output
Click Run to see the output here.

Les arguments sont year, month, day pour date, et jusqu'à year, month, day, hour, minute, second, microsecond pour datetime.

Lire les champs

Chaque date/datetime a des attributs :

main.py
Output
Click Run to see the output here.

isoformat() est ton ami pour une sortie lisible par une machine — il produit quelque chose comme "2026-04-20T09:30:15" que d'autres systèmes peuvent parser sans ambiguïté.

Formater avec strftime

Pour une sortie lisible par un humain, .strftime(fmt) transforme une date ou datetime en chaîne formatée :

main.py
Output
Click Run to see the output here.

Les codes de format les plus souvent utiles à retenir :

  • %Y — année à 4 chiffres (2026)
  • %m — numéro du mois, rempli de zéros (04)
  • %d — jour du mois, rempli de zéros (20)
  • %H / %I — heure, format 24h/12h
  • %M — minute
  • %S — seconde
  • %A / %a — nom du jour complet / abrégé (Monday / Mon)
  • %B / %b — nom du mois complet / abrégé (April / Apr)
  • %p — AM/PM

Tu n'as pas besoin de les mémoriser ; garde une référence en favori et regarde quand tu as besoin d'un.

Parser avec strptime

La direction inverse : prendre une chaîne de forme connue et la transformer en datetime :

main.py
Output
Click Run to see the output here.

La chaîne de format doit correspondre exactement à l'entrée. Sinon, strptime lève ValueError.

Pour les chaînes ISO-8601 (le standard lisible par machine), il y a un raccourci plus simple en Python moderne :

main.py
Output
Click Run to see the output here.

Si tu as affaire à des formats aléatoires, le paquet externe dateutil (pip install python-dateutil) a un parser.parse() indulgent qui prend une supposition raisonnable.

Arithmétique avec timedelta

Pour faire des maths sur les dates, utilise timedelta pour la différence ou le décalage :

main.py
Output
Click Run to see the output here.

Arguments de timedelta : days, seconds, microseconds, milliseconds, minutes, hours, weeks. Pas de months ni d'years — les mois sont de longueur variable. Pour les maths sur mois/années, utilise dateutil.relativedelta :

from dateutil.relativedelta import relativedelta
from datetime import date

today = date.today()
next_quarter = today + relativedelta(months=3)
print(next_quarter)

Fuseaux horaires : naïf vs conscient

Un datetime sans info de fuseau horaire est naïf — Python ne sait pas quel fuseau il représente. Les maths sur des datetimes naïfs vont bien tant que tu restes dans un seul fuseau logique ; les ennuis commencent au moment où des données de zones différentes se rencontrent.

Un datetime conscient porte l'info de fuseau avec lui. Attache un fuseau explicitement :

main.py
Output
Click Run to see the output here.

Python 3.9 a ajouté le module zoneinfo pour les fuseaux nommés (en utilisant la base IANA du système) :

main.py
Output
Click Run to see the output here.

Convertis entre zones avec .astimezone() :

main.py
Output
Click Run to see the output here.

Une règle à graver en mémoire : stocke les datetimes en UTC, convertis vers les zones locales seulement au moment de l'affichage. Cette seule habitude évite la plupart des bugs de fuseau horaire.

Timestamps

Un timestamp Unix est le nombre de secondes depuis 1970-01-01 UTC. Python convertit facilement :

main.py
Output
Click Run to see the output here.

Les timestamps sont utiles pour les comparaisons, le tri et l'interop avec d'autres systèmes. Pour une sortie orientée humain, convertis d'abord en datetime.

Mesurer combien de temps prend quelque chose

Pour des chronométrages rapides, soustrais deux datetimes :

main.py
Output
Click Run to see the output here.

Pour une mesure de performance plus sérieuse, utilise time.perf_counter() — il a une résolution sub-microseconde et est immunisé contre les changements d'horloge système. datetime.now() va bien pour des chiffres de type « combien de temps a pris cet appel API ».

Motifs que tu réutiliseras

main.py
Output
Click Run to see the output here.

Ce qu'il faut retenir

  • date, datetime et timedelta couvrent 90 % des besoins.
  • Utilise ISO-8601 pour le lisible machine ; strftime pour le lisible humain.
  • Stocke en UTC ; convertis à l'affichage.
  • Utilise zoneinfo pour les fuseaux nommés.
  • Pour mois et années, utilise dateutil.relativedelta.

Un dernier outil pour ta boîte à outils du monde réel : les expressions régulières, juste après.

Questions fréquentes

Comment obtenir la date et l'heure courantes en Python ?

datetime.now() renvoie la date et l'heure locales courantes. datetime.utcnow() renvoie UTC (bien que la préférence moderne soit datetime.now(timezone.utc) puisque utcnow() renvoie un datetime naïf). Pour juste la date, utilise date.today().

Comment formater une date en chaîne ?

Utilise .strftime(format) avec des codes de format comme %Y-%m-%d pour année-mois-jour. Exemple : datetime.now().strftime('%Y-%m-%d %H:%M'). Pour reparser une chaîne, utilise datetime.strptime(text, format) avec les mêmes codes.

Comment ajouter des jours à une date en Python ?

Utilise timedelta : from datetime import date, timedelta; date.today() + timedelta(days=7). timedelta prend en charge jours, heures, minutes, secondes, semaines et plus. Pour les maths sur mois et années, utilise dateutil.relativedelta externe — timedelta ne connaît pas les mois.

Apprendre à coder avec Coddy

COMMENCER