Les modules Python standards Datetime, Time et Calendar

En programmation, nous sommes souvent amenés à manipuler des dates qui sont des objets complexes. Python facilite le travail avec les dates en fournissant l’accès à des modules dont datetime, time et calendar que nous allons étudier dans cette leçon.

 

Le module Python standard datetime

Le module datetime est le module de référence pour manipuler les dates et le temps. Il nous fournit notamment des classes date et time qui vont nous être précieuses.

Python distingue deux sorte d’objets date et time : les objets “avisés” et les objets “naifs”. Un objet avisé est un objet qui possède suffisamment de connaissances internes pour se situer de façon relative par rapport à d’autres objets avisés. Un objet naïf ne comporte pas assez d’informations pour se situer sans ambiguïté par rapport à d’autres objets date ou time.

Ici, vous pouvez tenir que les objets avisés datetime et time ont un attribut optionnel d’information sur le fuseau horaire nommé tzinfo. Cet attribut ou objet tzinfo capture l’information à propos du décalage avec le temps UTC, le nom du fuseau horaire, et si l’heure d’été est effective.

Le module datetime définit les types suivants :

  • date : représente une date; possède des attributs year, month et day ;
  • time : représente un temps; possède des attributs hour, minute, second, microsecond et tzinfo ;
  • datetime : combinaison d’une date et d’un temps; possède des attributs year, month, day, hour, minute, second, microsecond et tzinfo;
  • timedelta : représente la différence entre deux objets date, time ou datetime exprimée en microsecondes ;
  • tzinfo : classe de base abstraite (= qui ne peut pas directement être instanciée) pour les objets portants des informations sur les fuseaux horaires ;
  • timezone : classe qui implémente la classe abstraite .

Chaque type (c’est-à-dire chaque classe) va posséder ses fonctions et variables qui vont nous permettre d’effectuer telle ou telle manipulation sur des dates, rendant le module datetime très complet.

Voici quelques manipulations courantes qu’on va pouvoir effectuer à partir des classes du module datetime :

Présentation du module Python Datetime

Pour une référence complète sur le module Python datetime, je vous invite à consulter la documentation.

 

Le module Python standard time

Le module Python time fournit différentes fonctions liées au temps. Il peut et est généralement utilisé conjointement avec le module datetime. Attention ici à ne pas confondre le module time et la classe time du module datetime.

Le module time possède à nouveau de nombreuses fonctions. Nous allons rapidement passer en revue les fonctions les plus utilisées. Une nouvelle fois, je vous invite à consulter la documentation pour plus d’informations sur ce module.

La fonction time() renvoie le temps en secondes depuis epoch sous forme de nombre à virgule flottante.

L’epoch correspond au point de départ du temps utilisé comme référence par votre OS. Il dépend donc de la plate-forme. Pour Unix, epoch est le 1er janvier 1970 à 00:00:00 (UTC). Pour savoir comment est définie epoch sur une plate-forme donnée, il suffit d’appeler time.gmtime(0).

La fonction gmtime() convertit un temps (passé en argument) exprimé en secondes depuis epoch en un struct_time au format UTC dans lequel le drapeau dst est toujours égal à zéro. Si aucun argument ne lui est fourni, l’heure actuelle telle que renvoyée par time() sera utilisée.

Le DST (Daylight Saving Time) correspond à l’heure d’été, un ajustement du fuseau horaire d’une heure (généralement) pendant une partie de l’année. Les règles de DST sont magiques (déterminées par la loi locale) et peuvent changer d’année en année.

Le struc_time correspond au type de la séquence de valeur temporelle renvoyé par gmtime(), localtime() et strptime(). Ses valeurs sont accessibles par index et par nom d’attribut. Les valeurs suivantes sont possibles :

Index Nom de l’attribut Ex de valeur
0 tm_year 2000, 2010, 2019
1 tm_mon plage [1, 12]
2 tm_mday plage [1, 31]
3 tm_hour plage [0,23]
4 tm_min plage [0,59]
5 tm_sec plage [0,61]
6 tm_wday plage [0, 6], Lundi valant 0
7 tm_yday plage [1, 366]
8 tm_isdst 0, 1 ou -1
tm_zone abréviation du nom du fuseau horaire
tm_gmtoff décalage à l’est de UTC en secondes

La fonction localtime() est similaire à gmtime() mais convertit le résultat en heure locale. On peut lui passer un nombre de secondes représentant une date en argument. Si aucun argument ne lui est fourni, l’heure actuelle telle que renvoyée par time() sera utilisée.

La fonction mktime() est la fonction inverse de localtime(). Son argument est soit un struct_time soit un 9-tuple.

La fonction strptime() analyse une chaîne passée en premier argument représentant une heure selon un format passé en second argument. La valeur renvoyée est une valeur struct_time telle que renvoyée par gmtime() ou localtime().

La fonction strftime() convertit un tuple ou une donnée struct_time passé en second argument en une chaîne. Le format de la chaine est spécifié par le premier argument passé à la fonction. Si le temps n’est pas fourni, l’heure actuelle renvoyée par localtime() est utilisée.

Les directives suivantes peuvent être utilisées dans la chaîne format :

Directive Signification
%a Nom abrégé du jour de la semaine selon les paramètres régionaux.
%A Le nom de semaine complet de la région.
%b Nom abrégé du mois de la région.
%B Nom complet du mois de la région.
%c Représentation appropriée de la date et de l’heure selon les paramètres régionaux.
%d Jour du mois sous forme décimale [01,31].
%H Heure (horloge sur 24 heures) sous forme de nombre décimal [00,23].
%I Heure (horloge sur 12 heures) sous forme de nombre décimal [01,12].
%j Jour de l’année sous forme de nombre décimal [001,366].
%m Mois sous forme décimale [01,12].
%M Minutes sous forme décimale [00,59].
%p L’équivalent local de AM ou PM.
%S Deuxième sous forme de nombre décimal [00,61].
%U Numéro de semaine de l’année (dimanche en tant que premier jour de la semaine) sous forme décimale [00,53]. Tous les jours d’une nouvelle année précédant le premier dimanche sont considérés comme appartenant à la semaine 0.
%w Jour de la semaine sous forme de nombre décimal [0 (dimanche), 6].
%W Numéro de semaine de l’année (lundi comme premier jour de la semaine) sous forme décimale [00,53]. Tous les jours d’une nouvelle année précédant le premier lundi sont considérés comme appartenant à la semaine 0.
%x Représentation de la date appropriée par les paramètres régionaux.
%X Représentation locale de l’heure.
%y Année sans siècle comme un nombre décimal [00, 99].
%Y Année complète sur quatre chiffres.
%z Décalage de fuseau horaire indiquant une différence de temps positive ou négative par rapport à UTC / GMT de la forme +HHMM ou -HHMM, où H représente les chiffres des heures décimales et M, les chiffres des minutes décimales [-23:59, +23:59].
%Z Nom du fuseau horaire (pas de caractères s’il n’y a pas de fuseau horaire).
%% Un caractère '%' littéral.

Présentation du module Python Time

 

Le module Python standard calendar

Le module Python calendar permet d’afficher un calendrier et fournit des fonctions relatives au calendrier.

Ce module définit une classe Calendar qui va permettre de créer des objets de type calendrier et une classe TextCalendar qui peut être utilisée pour générer des calendriers en texte brut.

Les calendriers sont des objets très spécifiques qu’on ne manipule pas tous les jours et je n’irai donc pas plus loin dans la présentation de ce module. Si vous avez besoin un jour de créer un calendrier, sachez simplement que ce module existe. Vous pourrez trouver toutes les informations relatives aux calendriers Python sur la documentation officielle du module.

Laisser un commentaire

© Pierre Giraud - Toute reproduction interdite - Mentions légales