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 ensembletimedelta— une durée (différence entre deux instants)
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
datetime.now() # current date + time
date.today() # current date onlyArithmétique avec timedelta
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.
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.
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) :
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
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`.
Afficher l'indice
base + timedelta(days=30), puis .strftime
Solution disponible après 3 tentatives
Exercice de révision
É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).
Afficher l'indice
strptime avec le modèle au format italien.
Solution disponible après 3 tentatives
Défi supplémentaire
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.
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