Accueil

Traduction

Tutoriel Python - sommaire

Tutoriel Python - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

Python : Modules et bibliothèques - manipuler les dates & heures

Le contenu de ce chapitre est un peu hétérogène.
En effet, avant d'aborder le traitement des dates et heures en Python je voudrais revenir sur les notions de module et de bibliothèque.

Modules et bibliothèques Python

Ne confondez pas bibliothèque Python et module Python.
Les modules Python sont installés mais pas disponibles par défaut, il faut les "importer" !
Les bibliothèques (ou librairies) sont des extensions du langage Python. Il faut toujours les installer !
Une bibliothèque peut comprendre plusieurs modules. Par exemple le module pyplot est un composant de la bibliothèque matplotlib.

Les modules

Un module est un ensemble de fonctions.

Comment activer (importer) un module ?


Or si vous avez consulté d'autres sources documentaires, vous avez pu lire  les instructions "import math" ou "import random".
Les deux solutions sont correctes !

Et si vous oubliez de préfixer les fonctions vous aurez un message d'erreur.

La console ne comprend pas la commande sqrt(25) mais comprend la commande math.sqrt(25).
N'en concluez pas que la première solution (from nomModule import *) est la meilleure car plus courte.
C'est vrai, si vous n'activez qu'un module mais si vous importez plusieurs modules, il faut mieux utiliser la deuxième solution.
En effet il est alors possible qu'il ait des ambiguïtés ... Deux modules employant le même mot pour désigner deux fonctions différentes ...
Un seul exemple : dans les deux module time & datetime il existe une fonction qui porte le même nom : time() ...

La deuxième solution a aussi un avantage, je peux utiliser un alias (de préférence un mot court) qui servira de préfixe.
Exemple :

Vous donnerez un alias à un module importé lorsque le nom de ce dernier est long tel "datetime" ou "statistic".

Découverte d'un module

Mais comment connaitre la liste des fonctions d'un module et le rôle de chacune ?

Pour découvrir toutes les fonctions d'un module il suffit de l'importer puis de taper la commande help(nomModule).
Pour avancer d'une page dans la liste tapez sur "espace".
La commande dir(nomModule) se contente d'afficher la liste des fonctions sans davantage de détails.

pip : gestionnaire de paquets

Un des atouts de Python est la multitude de bibliothèques (ou librairies) disponibles.
Pour que le téléchargement de ces bibliothèques ne devienne pas un parcours du combattant il a été imaginé un outil qui s'appelle pip.
pip est un gestionnaire de paquets utilisé pour installer et gérer des librairies Python.
À partir des versions 3, pip est inclus par défaut dans la distribution officielle du langage. Donc, en clair, si vous avez installé une version de Python 3, vous n'avez plus besoin d'installer l'utilitaire pip, c'est déjà fait !

Utilisation de pip

Attention il faut lancer "pip" à partir d'un terminl windows (CMD ou PowerShell).

Par exemple, si vous voulez installer le micro framework python flask il suffit de taper : pip install flask

Ci-dessous capture d'écran qui montre toutes les librairies Python installées sur mon PC (commande : pip list) :

Notez que les librairies matplolib & numpy sont déjà installées.

Le module time

Les module time & datetime permettent de gérer les dates et heures.
Attention des confusions sont possibles entre certaines fonctions appartenant à ces différentes fonctions.

Le module "time" fournit entre autres la date et l'heure de votre système. Il propose aussi une fonction de temporisation : sleep(n).
Commandes à tester :

J'active le module time avec la syntaxe "import nomModule". Donc je suis obligé de préfixer les fonctions du nom du module.
La commande time.time() retourne un nombre qui est le "timestamp" : le nombre de secondes entre le 1er janvier 1970 et l'instant présent. Le timestamp est une notion que l'on retrouve dans pratiquement tous les langages.

La commande time.localtime() affiche la date et l'heure système d'une façon plus claire.

Vous voyez donc que j'ai utilisé l'interpréteur le 8 janvier 2021.

time.strftime("%A %d %B %Y") : affichage de la date système avec le format habituel pour un Français : nomJour, rangJour, nomMois, anneé
time.strftime("%H : %M : %S") : affiche de l'heure du système avec un formatage : heures:minutes:secondes

Les symboles de formatage à utiliser avec cette fonction :

SymboleSens
%ANom du jour de la semaine
%dJour du mois
%BNom du mois
%YAnnée
%HHeureq
%MMinutes
%SSecondes

time.sleep(20) : mise en pause durant 20 secondes. Vous constatez qu'après avoir appuyé sur ENTER les triples chevrons sont invisibles et le curseur clignote. Au bout de 30 secondes, les chevrons réapparaissent.
Cette fonction ne présente pas beaucoup d'intérêt en mode commande par contre en mode programmé une temporisation peut être parfois souhaitable.

Le module datetime

Le module datetime comprend trois fonctions importantes : date(), datetime(), time() respectivement pour créer une date, une heure, un instant (date & heure).

Commandes pour vous familiariser avec la syntaxe

J'ai importe le module datetime avec un alias : dt.
Nous avons dans ce module trois fonctions importantes : date(), time() & datetime().
Tiens tiens ... , la fonction "time()" ça vous dit rien ?

Analyse de cette batterie de commandes

La fonction date(Y,M,D) crée un objet avec la date précisée par les trois arguments. On peut appliquer à cet objet les propriétés : year,month, day.
La fonction time() crée un objet avec l'heure précisée avec jusqu'à trois arguments (heure, minute,seconde). Pour produire l'heure de minuit (00:00:00) il suffit d'utiliser la méthode time sans argument.
On peut appliquer à une heure les propriétés : hour, minute, seconde.
La méthode date() suivie de today() retourne la date du jour.
La fonction datetime() suivie de now() retourne l'instant présent : date et heure courantes.
On retrouve dans le module datetime la méthode strftime() que nous avions déjà utilisé avec le module time
Je ne reviens pas sur les symboles de formatage. Je précise simplement que la méthode retourne une chaine !

Danger

Dans le module "time" il y a la fonction "time()" et dans le module "datetime" il existe aussi une fonction "time()".
La première retourne le "timestamp" tandis que la seconde permet de produire une heure.
Donc vous voyez que le risque d'ambiguïte entre deux fonctions appartenant à deux modules importés est bien réel. D'où l'intérêt de l'activation d'un module avec la syntaxe : "import nomModule as alias".

Calcul d'une durée en jours entre deux dates

Je vais maintenant vous montrer comment calculer la différence en jours entre deux dates.
Tapez la batterie de commandes suivantes :

J'importe le module datetime sous le pseudo "dt".
Je crée une date "jour_an" avec la méthode date(année,mois,jour).
Je crée une deuxième date avec toujours cette méthode.
Dans "intervalle" je calcule la durée en jours entre ces deux dates.
La variable "intervalle" est un objet timedelta de la classe datetime.

Le module calendar

Le module calendar est un module intégré qui fournit des fonctions pour travailler avec des calendriers.
Il vous permet de créer et de manipuler des calendriers, de les imprimer et de réaliser divers calculs impliquant des dates et des heures.

Afficher le calendrier d'un mois

Commandes dans la console

J'ai affiché les calendriers des mois de décembre et novembre 2023 mais auss de janvier 2924 gràce à la méthode premonth(annee,mois).
Je vous montre aussi que la méthode prmonth() de la classe calendar peut être argumentée avec des variables.
Notez que la première colonne correspond aux lundis.

Afficher le calendrier d'une année

Le programme tient en quelques lignes !

Nombre de jours dans un mois ?

Cette fois je vais employer la méthode monthrange(année,mois) de la classe calendar.

La deuxième commande retourne sous forme d'un tuple le rang du premier jour du mois et le nombre de jours dans le mois. On apprend que le mois de décembre 2023 commence par un vendredi ("weekday" de rang 4).
Donc pour récupérer le nombre de jours il faut rajouter "[1]" à la commande (extraction du 2ième élément du tuple); commande qui devient donc : n_jours = calendar.monthrange(2023,12)[1]. On apprend que le mois de décembre compte 31 jours.

Savoir si une année est bissextile ou pas ?

Ici je vais utiliser une méthode qui retourne un booléen.

Afficher le calendrier d'un mois, la première colonne étant DIMANCHE

C'est un peu plus compliqué : il faut enchainer trois commandes.

Calendar.TextCalendar(calendar.SUNDAY) indique à la console de créer un calendrier texte ; la première colonne du calendrier sera celle des dimanches.
c.formatmonth(2023,12) : établissement du calendrier du mois de décembre 2023
Dernière commande : affichage du calendrier.

Afficher un calendrier au format HTML

Les commandes

Cette série de commandes produit tout le code HTML pour afficher dans une page web un joli calendrier pour le mois de décembre 2023.
Seule différence avec la série de commandes précédentes : emploi de la méthode HTMLCalendar à la place de TextCalendar.

Le rendu de ce code dans cette page web

December 2023
SunMonTueWedThuFriSat
     12
3456789
10111213141516
17181920212223
24252627282930
31      

Joli !!!

Afficher la liste des mois et des jours

Nous allons cette fois utiliser deux propriétés de la classe calendar : month_name & day_name.