logo oujood
🔍

Python : manipuler la date et l'heure

En Python, la date et l'heure ne sont pas des types natifs — elles passent par le module datetime. Voici comment l'utiliser efficacement, du plus simple au plus pratique.

OUJOOD.COM

Contrairement aux langages qui intègrent la date dans leurs types de base, Python exige d'importer un module dédié : datetime. Ce n'est pas une contrainte — c'est un choix de conception qui garde le langage léger. Le module regroupe tout ce dont vous avez besoin : lire la date du jour, calculer un écart entre deux moments, reformater une date selon une locale, ou convertir une chaîne en objet exploitable.

Dans cette page, vous allez parcourir les quatre grandes classes du module (date, time, datetime et timedelta), puis les deux méthodes de formatage incontournables (strftime et strptime). Les exemples sont progressifs — commencez par le premier, et chaque bloc suivant s'appuie sur ce que vous venez de voir.

Pour travailler avec les dates et heures, vous devez importer le module datetime en début de fichier :

import datetime  ou  import datetime as dte

Le module datetime en Python

Le module datetime met à votre disposition plusieurs classes. Les quatre les plus utilisées sont :

  • date — représente une date (année, mois, jour)
  • time — représente une heure (heures, minutes, secondes, microsecondes)
  • datetime — combine date et heure dans un seul objet
  • timedelta — représente une durée, utile pour les calculs entre dates

Si vous voulez voir l'ensemble des attributs disponibles dans le module, la fonction dir() vous le liste d'un coup :

  📋 Copier le code

# Lister le contenu du module datetime
import datetime as dte

print(dir(dte))
Ce programme affiche :
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__',
'__file__', '__loader__', '__name__', '__package__', '__spec__',
'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta',
'timezone', 'tzinfo']

Et si vous appliquez dir() directement sur la classe datetime, vous obtenez la liste de ses méthodes :

  📋 Copier le code

# Lister les méthodes de la classe datetime
import datetime as dte

print(dir(dte.datetime))

Les méthodes les plus souvent utilisées dans la pratique :

  • date, day, hour, minute, month
  • now, replace, second, strftime, strptime
  • time, timestamp, timetuple, timetz, today
  • weekday, year

Exemple 1 : obtenir la date et l'heure actuelles

La méthode now() de la classe datetime renvoie un objet contenant la date et l'heure locales au moment de l'exécution. C'est le point d'entrée le plus courant.

  📋 Copier le code

# Récupérer la date et l'heure actuelles
import datetime

objet_datetime = datetime.datetime.now()
print(objet_datetime)

Au moment où vous exécutez ce code, Python affiche quelque chose comme :

2026-05-16 14:23:07.391042

Ce que fait le code, étape par étape :

  1. On importe le module datetime avec import datetime.
  2. On accède à la classe datetime qui se trouve à l'intérieur du module — d'où la notation datetime.datetime.
  3. On appelle la méthode now() sur cette classe, qui renvoie un objet datetime avec la date et l'heure locales.

Exemple 2 : obtenir uniquement la date du jour

Si vous n'avez besoin que de la date (sans l'heure), utilisez la méthode today() de la classe date. On importe ici le module avec un alias pour raccourcir l'écriture :

  📋 Copier le code

# Obtenir la date du jour avec un alias de module
import datetime as dte

objet_date = dte.date.today()
print(objet_date)

Résultat affiché (date du jour au moment de l'exécution) :

2026-05-16

La classe date (datetime.date)

La classe date sert à créer un objet représentant une date précise — uniquement l'année, le mois et le jour, sans heure. C'est la classe à utiliser quand la notion de temps n'a pas d'importance pour votre programme.

Exemple : créer un objet date pour une date précise

Le constructeur date() prend trois arguments dans l'ordre : année, mois, jour.

  📋 Copier le code

# Créer un objet date pour une date spécifique
import datetime

d = datetime.date(2026, 5, 16)
print(d)

Vous pouvez aussi n'importer que la classe date depuis le module, pour éviter de répéter datetime.date à chaque fois :

  📋 Copier le code

# Importer uniquement la classe date
from datetime import date

d = date(2026, 5, 16)
print(d)

Exemple : obtenir la date actuelle

La méthode today() crée un objet date contenant la date du jour, sans aucun argument à passer.

  📋 Copier le code

# Récupérer la date du jour
from datetime import date

ce_jour = date.today()
print("La date courante est : ", ce_jour)

Exemple : créer une date à partir d'un horodatage (timestamp)

Un timestamp Unix est un entier qui représente le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC. C'est un standard utilisé dans presque tous les systèmes informatiques pour stocker les dates de façon compacte. La méthode fromtimestamp() convertit cet entier en objet date lisible.

  📋 Copier le code

# Convertir un timestamp en date
from datetime import date

timestamp = date.fromtimestamp(1326244364)
print("La date est : ", timestamp)

Résultat : La date est : 2012-01-10

Exemple : extraire l'année, le mois et le jour séparément

Un objet date expose ses composantes en attributs directement accessibles : .year, .month et .day.

  📋 Copier le code

# Accéder aux composantes d'une date
from datetime import date

ce_jour = date.today()

print("L'année courante est :", ce_jour.year)
print("Le mois courant est :", ce_jour.month)
print("Le jour courant est :", ce_jour.day)

La classe time (datetime.time)

La classe time représente une heure locale, indépendamment de toute date. Elle est utile quand vous travaillez avec des horaires, des plannings, ou que vous voulez manipuler uniquement la partie "temps" d'un objet.

Exemple : créer des objets time

Le constructeur accepte les arguments dans l'ordre : heure, minute, seconde, microseconde. Tous sont optionnels et valent 0 par défaut.

  📋 Copier le code

# Différentes façons de créer un objet time
from datetime import time

# Sans argument : minuit par défaut
temps1 = time()
print("temps1 =", temps1)

# Heure, minute, seconde en arguments positionnels
temps2 = time(9, 44, 16)
print("temps2 =", temps2)

# Mêmes valeurs avec arguments nommés
temps3 = time(hour=9, minute=44, second=16)
print("temps3 =", temps3)

# Avec les microsecondes
temps4 = time(9, 44, 16, 334660)
print("temps4 =", temps4)
temps1 = 00:00:00
temps2 = 09:44:16
temps3 = 09:44:16
temps4 = 09:44:16.334660

Exemple : accéder aux composantes d'un objet time

Comme pour la classe date, les attributs .hour, .minute, .second et .microsecond sont directement accessibles sur l'objet.

  📋 Copier le code

# Lire les composantes d'un objet time
from datetime import time

temps = time(9, 44, 16)

print("heure =", temps.hour)
print("minute =", temps.minute)
print("seconde =", temps.second)
print("microseconde =", temps.microsecond)
heure = 9
minute = 44
seconde = 16
microseconde = 0

Remarque : la microseconde n'a pas été passée au constructeur, donc Python retourne sa valeur par défaut : 0.

La classe datetime (datetime.datetime)

La classe datetime combine les informations d'une date et d'une heure dans un seul objet. C'est la plus polyvalente des quatre classes : elle vous permet de travailler avec un instant précis dans le temps, pas seulement une date ou une heure isolée.

Attention à la notation : le module s'appelle datetime et la classe aussi. On écrit donc datetime.datetime quand on importe le module entier, ou on utilise l'import direct from datetime import datetime pour simplifier.

Exemple : créer un objet datetime

Les trois premiers arguments (année, mois, jour) sont obligatoires. Les suivants (heure, minute, seconde, microseconde) sont optionnels et valent 0 par défaut.

  📋 Copier le code

# Créer des objets datetime avec différents niveaux de précision
from datetime import datetime

# Uniquement la date — heure initialisée à 00:00:00
a = datetime(2026, 5, 16)
print(a)

# Date et heure complètes avec microsecondes
b = datetime(2026, 5, 16, 14, 30, 59, 342380)
print(b)
2026-05-16 00:00:00
2026-05-16 14:30:59.342380

Afficher la date et l'heure actuelles

La méthode now() retourne un objet datetime avec la date et l'heure locales au moment de l'exécution. C'est la méthode à utiliser dans la plupart des cas pratiques.

  📋 Copier le code

# Afficher la date et l'heure actuelles
from datetime import datetime as dte

a = dte.now()
print(a)

En exécutant ce code, Python affiche la date et l'heure locales courantes, par exemple :

2026-05-16 14:23:07.391042

Exemple : extraire chaque composante séparément

Un objet datetime expose toutes ses composantes en attributs. La méthode timestamp() retourne quant à elle la valeur Unix correspondante — pratique pour stocker une date en base de données ou comparer deux instants.

  📋 Copier le code

# Lire les attributs d'un objet datetime
from datetime import datetime as dte

a = dte.now()

print(a)
print("Année =", a.year)
print("mois =", a.month)
print("heure =", a.hour)
print("minute =", a.minute)
print("seconde =", a.second)
print("timestamp =", a.timestamp())
2026-05-16 14:23:07.391042
Année = 2026
mois = 5
heure = 14
minute = 23
seconde = 7
timestamp = 1747397387.391042

Formater la date et l'heure en Python

Un objet datetime est pratique à manipuler en code, mais difficile à lire pour un utilisateur. Le format par défaut (AAAA-MM-JJ HH:MM:SS) correspond à la norme ISO 8601 — c'est ce qu'on utilise pour les bases de données et les APIs. Mais pour afficher une date dans une interface, un e-mail ou un rapport, vous aurez souvent besoin d'un autre format.

Python fournit deux méthodes complémentaires pour cela : strftime() pour transformer un objet en chaîne formatée, et strptime() pour l'opération inverse — lire une chaîne et en extraire un objet datetime.

strftime() — transformer un objet datetime en chaîne

La méthode strftime() (abréviation de "string format time") prend une chaîne de format contenant des directives comme %Y, %m, %d, et retourne une chaîne de caractères mise en forme selon ces directives. Elle est disponible sur les objets date, time et datetime.

  📋 Copier le code

# Formater une date avec strftime()
from datetime import datetime

maintenant = datetime.now()

# Format américain : mois/jour/année
d = maintenant.strftime("%m/%d/%Y")
print("La date est : ", d)

# Heure seule
t = maintenant.strftime("%H:%M:%S")
print("Il est :", t)

# Format complet américain
s1 = maintenant.strftime("%m/%d/%Y, %H:%M:%S")
print("s1:", s1)

# Format complet français
s2 = maintenant.strftime("%d/%m/%Y, %H:%M:%S")
print("s2:", s2)
La date est :  05/16/2026
Il est : 14:23:07
s1: 05/16/2026, 14:23:07
s2: 16/05/2026, 14:23:07

Les variables d, t, s1 et s2 sont des chaînes de caractères (type str), pas des objets datetime. Voici la liste complète des directives disponibles :

DirectiveDescription
%aJour de la semaine, version courte
%AJour de la semaine, version complète
%wJour de la semaine (0 = dimanche, 6 = samedi)
%dJour du mois 01-31
%bNom du mois, version courte
%BNom du mois, version complète
%mMois en chiffres 01-12
%yAnnée sans le siècle (ex: 26)
%YAnnée complète (ex: 2026)
%HHeure format 24h, 00-23
%IHeure format 12h, 00-12
%pAM ou PM
%MMinute 00-59
%SSeconde 00-59
%fMicroseconde 000000-999999
%zDécalage UTC (ex: +0100)
%ZNom du fuseau horaire
%jNuméro du jour dans l'année, 001-366
%USemaine de l'année (dimanche = 1er jour), 00-53
%WSemaine de l'année (lundi = 1er jour), 00-53
%cDate et heure selon la locale locale
%CSiècle (ex: 20 pour 2026)
%xDate selon la locale
%XHeure selon la locale
%%Le caractère littéral %
%GAnnée ISO 8601
%uJour de la semaine ISO 8601 (1=lundi, 7=dimanche)
%VNuméro de semaine ISO 8601, 01-53

strptime() — transformer une chaîne en objet datetime

strptime() fait l'inverse de strftime() : elle prend une chaîne de caractères représentant une date, et la convertit en objet datetime. C'est indispensable quand vous lisez des dates depuis un fichier texte, un formulaire ou une API.

Elle prend deux arguments : la chaîne à analyser, et le format attendu (avec les mêmes directives que strftime).

  📋 Copier le code

# Convertir une chaîne en objet datetime avec strptime()
from datetime import datetime

# Chaîne de date au format texte
chaine_date = "16 May, 2026"
print("La chaîne de date est : ", chaine_date)

# Conversion en objet datetime avec le format correspondant
objet_date = datetime.strptime(chaine_date, "%d %B, %Y")
print("L'objet date est : ", objet_date)

print()

# Exemple avec la date du jour reformatée puis reconvertie
maintenant = datetime.now()
d_str = maintenant.strftime("%d, %B, %Y")
print("Chaîne reformatée : ", d_str)

d = datetime.strptime(d_str, "%d, %B, %Y")
print("Objet date reconverti : ", d)

Les directives %d, %B et %Y correspondent respectivement au jour, au nom complet du mois et à l'année sur quatre chiffres.


Par carabde | Mis à jour le 16 mai 2026