Passer au contenu principal
eLearner.app
Module 8 · Leçon 2 sur 430/36 dans le cours~12 min
Leçons du module (2/4)

datetime : dates et heures

Le module datetime fournit les classes pour représenter les dates et les heures.

Les trois classes principales

  • date — date uniquement (année, mois, jour)
  • time — heure uniquement (heure, minute, seconde, microseconde)
  • datetime — date + heure ensemble
  • timedelta — une durée (différence entre deux instants)
Python
from datetime import date, time, datetime, timedelta

date(2025, 1, 1)                  # datetime.date(2025, 1, 1)
time(14, 30, 0)                   # datetime.time(14, 30)
datetime(2025, 1, 1, 14, 30, 0)   # datetime.datetime(2025, 1, 1, 14, 30)

"Maintenant" : now et today

Python
datetime.now()        # current date + time
date.today()          # current date only

Arithmétique avec timedelta

Python
from datetime import datetime, timedelta

ora = datetime(2025, 1, 1, 12, 0)
domani = ora + timedelta(days=1)
una_ora_fa = ora - timedelta(hours=1)

# difference between two datetimes -> timedelta
delta = domani - ora
delta.days        # 1
delta.total_seconds()   # 86400.0

```timedeltaacceptedays, seconds, microseconds, milliseconds, minutes, hours, weeks(PASmonthsouyears`, qui sont ambigus).

Formatage : strftime

Transforme datetime → chaîne selon un modèle.

Python
ora = datetime(2025, 1, 1, 14, 30)
ora.strftime("%Y-%m-%d")         # '2025-01-01'
ora.strftime("%d/%m/%Y %H:%M")   # '01/01/2025 14:30'
ora.strftime("%A %d %B %Y")      # 'Wednesday 01 January 2025' (locale-dependent)

Directives les plus utilisées : %Y année sur 4 chiffres, %m mois sur 2 chiffres, %d jour sur 2 chiffres, %H heure sur 24h, %M minutes, %S secondes.

Analyse (parsing) : strptime

L'inverse : chaîne → datetime, selon le modèle attendu.

Python
datetime.strptime("01/01/2025", "%d/%m/%Y")
# datetime.datetime(2025, 1, 1, 0, 0)

ISO 8601

Pour l'échange de données, préférez toujours le format ISO 8601 (AAAA-MM-JJTHH:MM:SS) :

Python
ora.isoformat()                 # '2025-01-01T14:30:00'
datetime.fromisoformat("2025-01-01T14:30:00")

Fuseaux horaires et datetimes conscients

Par défaut, les objets datetime en Python sont naïfs (naive, c'est-à-dire qu'ils ne contiennent aucune information de fuseau horaire). Pour les applications réelles, il est recommandé de les rendre conscients (aware) en définissant les informations de fuseau horaire via datetime.timezone.utc ou en utilisant le module zoneinfo.

À vous de jouer

Exercice#python.m8.l2.e1
Tentatives : 0Chargement…

Calculez la date 30 jours après le 1er janvier 2025 et formatez-la sous la forme 'AAAA-MM-JJ' dans la variable `date_str`. Évaluez `date_str`.

Chargement de l'éditeur…
Afficher l'indice

base + timedelta(days=30), puis .strftime

Solution disponible après 3 tentatives

Exercice de révision

Exercice#python.m8.l2.e2
Tentatives : 0Chargement…

Étant donné la chaîne `s = '15/03/2025'`, analysez-la avec strptime dans la variable `d` (objet datetime). Évaluez le jour de la semaine sous forme d'entier `d.weekday()` (0=Lun, 6=Dim).

Chargement de l'éditeur…
Afficher l'indice

strptime avec le modèle au format italien.

Solution disponible après 3 tentatives

Défi supplémentaire

Exercice#python.m8.l2.e3
Tentatives : 0Chargement…

Importez `date` depuis le module `datetime`. Calculez la différence en jours entre le 25 décembre 2026 (`date(2026, 12, 25)`) et le 20 décembre 2026 (`date(2026, 12, 20)`). Stockez le nombre entier de jours (en utilisant l'attribut `.days` du delta) dans `days_diff`. Enfin, évaluez la variable.

Chargement de l'éditeur…
Afficher l'indice

La différence entre deux dates renvoie un timedelta. Accédez aux jours sous forme d'entier avec delta.days.

Solution disponible après 3 tentatives