Le module datetime en Python

@joekakone

Joseph Konka @joekakone

03/03/2026 · 10 min

Manipulez les dates et heures en Python : objets date, time, datetime, calculs de durées avec timedelta, parsing de chaînes avec strptime et formatage personnalisé avec strftime.

Le module datetime en langage Python#

Dans les applications métier, l'ingénierie des données et la finance, la manipulation des données temporelles (dates d'inscriptions, séries chronologiques, délais de livraison, calculs d'échéances) est omniprésente.

Le module natif datetime fournit des types dédiés pour représenter des dates calendaires, des heures précises et effectuer des calculs arithmétiques temporels fiables en gérant les années bissextiles et le nombre variable de jours par mois.


1. Les classes fondamentales du module#

Le module propose quatre classes principales :

Classe Description Exemple
date Date calendaire idéalisée (année, mois, jour) 2026-03-03
time Heure indépendante du calendrier (heure, minute, seconde, microseconde) 14:30:00
datetime Combinaison complète d'une date et d'une heure 2026-03-03 14:30:00
timedelta Représente une durée ou l'écart entre deux dates 30 days, 2:00:00
from datetime import date, time, datetime, timedelta

# 1. Date du jour
aujourdhui = date.today()
print("Aujourd'hui :", aujourdhui)  # ex: 2026-03-03

# 2. Instant présent avec microsecondes
maintenant = datetime.now()
print("Timestamp actuel :", maintenant)

# 3. Création manuelle d'un événement
naissance = date(1995, 10, 25)
print("Date specifiee  :", naissance)

2. Arithmétique des dates avec timedelta#

Pour calculer une date future, passée ou évaluer l'écart séparant deux événements, on utilise l'objet timedelta :

from datetime import datetime, timedelta

maintenant = datetime.now()

# 1. Ajouter 30 jours et 2 heures (ex: expiration d'un abonnement)
echeance = maintenant + timedelta(days=30, hours=2)
print("Echeance du contrat :", echeance.strftime("%Y-%m-%d %H:%M"))

# 2. Soustraire une semaine
semaine_derniere = maintenant - timedelta(weeks=1)

# 3. Écart entre deux dates (renvoie un timedelta)
nouvel_an = datetime(2027, 1, 1)
decompte = nouvel_an - maintenant

print(f"Jours restants avant 2027 : {decompte.days} jours ({decompte.total_seconds() / 3600:.1f} heures)")

3. Formatage et Parsing : strftime contre strptime#

C'est le duo le plus crucial pour tout développeur ou analyste de données :

flowchart LR
    A[Objet datetime] -->|strftime : Format vers Chaîne| B["Chaine de texte '03/03/2026'"]
    B -->|strptime : Parse vers Objet| A

A. Formater un objet datetime en texte : strftime()#

(String Format Time) convertit une date en une chaîne personnalisée :

date_ref = datetime(2026, 3, 3, 15, 30, 45)

print(date_ref.strftime("%d/%m/%Y"))           # '03/03/2026'
print(date_ref.strftime("%Y-%m-%d %H:%M:%S"))  # '2026-03-03 15:30:45'
print(date_ref.strftime("%A %d %B %Y"))        # 'Tuesday 03 March 2026'

Directives de formatage courantes#

Directive Signification Exemple
%Y Année complète sur 4 chiffres 2026
%m Mois sous forme de nombre (01 à 12) 03
%d Jour du mois sur deux chiffres (01 à 31) 03
%H Heure au format 24h (00 à 23) 15
%M Minute sur deux chiffres (00 à 59) 30
%S Seconde sur deux chiffres (00 à 59) 45
%A / %B Nom complet du jour / du mois en anglais Tuesday / March

B. Convertir une chaîne texte en objet datetime : strptime()#

(String Parse Time) analyse une chaîne selon un masque de formatage pour instancier un datetime :

chaine_recue = "15/10/2026 08:45"
masque = "%d/%m/%Y %H:%M"

# Conversion en objet manipulable
objet_date = datetime.strptime(chaine_recue, masque)
print("Type converti :", type(objet_date))
print("Annee extraite :", objet_date.year)

[!TIP] Norme ISO 8601 (Python 3.7+) :
Pour les formats standards ISO AAAA-MM-JJ, vous pouvez utiliser directement date.fromisoformat("2026-03-03") sans spécifier de masque !


4. Timestamps UNIX et compatibilité#

Un timestamp UNIX représente le nombre de secondes écoulées depuis le 1er janvier 1970 à minuit UTC :

import time
from datetime import datetime

# 1. Obtenir le timestamp courant (secondes)
ts = datetime.now().timestamp()
print("Timestamp Unix :", ts)

# 2. Reconstruire une date à partir d'un timestamp
date_reconstruite = datetime.fromtimestamp(ts)
print("Date reconstruite :", date_reconstruite)

5. Mise en pratique : Calculateur d'échéancier de facturation#

Concevons un script professionnel qui calcule automatiquement la date limite de règlement d'une facture à « 30 jours fin de mois » :

from datetime import datetime, timedelta

def calculer_echeance_30j_fin_de_mois(date_emission_str: str) -> dict:
    """Calcule l'échéance à 30 jours fin de mois pour une facture donnée."""
    date_emission = datetime.strptime(date_emission_str, "%Y-%m-%d")

    # Étape 1 : Ajouter 30 jours
    date_plus_30j = date_emission + timedelta(days=30)

    # Étape 2 : Trouver le dernier jour du mois atteint
    # Astuce : passer au 1er du mois suivant et reculer d'un jour
    if date_plus_30j.month == 12:
        premier_mois_suivant = datetime(date_plus_30j.year + 1, 1, 1)
    else:
        premier_mois_suivant = datetime(date_plus_30j.year, date_plus_30j.month + 1, 1)

    date_limite = premier_mois_suivant - timedelta(days=1)

    return {
        "emission": date_emission.strftime("%d/%m/%Y"),
        "limite_reglement": date_limite.strftime("%d/%m/%Y"),
        "jours_accordes": (date_limite - date_emission).days
    }

facture = calculer_echeance_30j_fin_de_mois("2026-03-12")
print("=== CONDITIONS DE REGLEMENT CLIENT ===")
print(f"Date d'emission   : {facture['emission']}")
print(f"Echeance limite   : {facture['limite_reglement']}")
print(f"Delai total accorde : {facture['jours_accordes']} jours")

6. Défi d'application#

Écrivez un programme nommé calculateur_age_exact.py qui demande à l'utilisateur sa date de naissance au format JJ/MM/AAAA et affiche son âge exact décomposé en années, mois et jours révolus par rapport à la date du jour.

Commentaires

Inscrivez-vous à une formation complète

Voir le catalogue