Python : comment définir les modules "temps"

Table des matières

I. Introduction

II. Le module time

    1. La méthode time ()
    2. La méthode localtime ()
    3. La méthode mktime ()
    4. La méthode sleep ()
    5. La méthode strftime ()

III. Le module datetime

    1. La méthode date ()
    2. La méthode time ()
    3. La méthode datetime ()
    4. La méthode timedelta ()

IV. Le module calendar

V. Le module locale

VI. Exercices d’application

    1. Exercice 1
      1. Enoncé
      2. Corrigé
    2. Exercice 2
      1. Enoncé
      2. Corrigé

VII. Conclusion

I. Introduction

En programmation, nous devons souvent composer avec des dates complexes. En donnant accès aux modules, y compris datetimetimelocale et calendar, Python nous facilitera l'utilisation des dates, et ces modules seront explorés dans ce tutoriel.

II. Le module time

Lorsque vous souhaitez manipuler le temps de manière simple, le module time est sans aucun doute le premier à utiliser.

1. La méthode time ()

Comment représenter le temps ? Nous allons découvrir la représentation la plus difficile à comprendre pour les humains, mais le plus approprié pour les ordinateurs : nous stockons la date et l'heure sous forme d’un entier.

L'idée adoptée est d'exprimer la date et l'heure sur la base du nombre totale de secondes dans une durée déterminée. Dans la plupart des cas, la date correspond à l'Epoch Unix à 00 : 00 : 00 le 1er janvier 1970.

Nous devons définir une date comme référence. D'autre part, les ordinateurs sont inévitablement limités dans leur gestion des entiers. Dans le langage de l'époque, on considérait ce fait très simple : une seconde ne peut pas être trop comptée. Par conséquent, la date de l'Epoch ne peut pas être inversée dans le temps.

Nous verrons d'abord comment afficher le nombre de secondes passées depuis 00 : 00 : 00 le 01/01/1970.

  • Code :

import time
time.time()

  • Résultat d’exécution :

Ce nombre n'est pas facile à comprendre pour les humains. Cependant, pour une machine, c'est le cas parfait : la durée en secondes est facile à additionner, soustraire, multiplier ... Bref, les performances de l'ordinateur en ce nombre de secondes appelée généralement timestamp est bien meilleur.

Nous pouvons réaliser un test : stockez la valeur de retour time.time () dans une première variable, puis stockez la nouvelle valeur de retour time.time () dans une seconde variable quelques secondes plus tard. Nous réaliserons ensuite la comparaison de ces deux variables, et effectuons ensuite la soustraction :

Exemple :

Code :

début = time.time()
# Nous attendons quelques secondes puis tapons la commande suivante
fin = time.time()
print(début, fin)
print(début fin - début # le nombre de secondes entre début et fin

Résultat d’exécution :

Vous remarquerez que la valeur de retour de time.time () n'est pas un entier, mais un nombre à virgule flottante. L'heure donnée de cette manière est plus précise qu'une seconde près. Pour les calculs de performances, cette fonction n'est généralement pas utilisée.

2. La méthode localtime ()

La méthode time.localtime () du module time est utilisée pour convertir le nombre de secondes depuis l'époque en un objet time.struct_time de l'heure locale tout en indiquant les informations liées à la date et à l’heure.

Syntaxe :

time.localtime ([secondes])

Paramètres :

Secondes (facultatif) : valeur entière ou à virgule flottante, représentant le temps en secondes. Le nombre de secondes spécifié sera ignoré. Si le paramètre secondes n'est pas fourni, l'heure actuelle renvoyée par la méthode time.time () est utilisée.

  • Code :

time.localtime()

·

Résultat d’exécution :

Cette fonction renvoie un objet dans l'ordre, qui contient :

tm_year

Année, sous forme d'entier

tm_mon

Nombre de mois (1-12)

tm_mday

le nombre de jours dans un mois (1-31)

tm_hour

l'heure de la journée (0 -23)

tm_min

les minutes (0 - 59)

tm_sec

Le nombre de secondes (0 - 61);

tm_wday

le jour de la semaine (0-6)

tm_yday

le jour d'année (1-366)

tm_isdst

changement d'heure locale (entier)

Comme mentionné ci-dessus, nous utiliserons la fonction localtime. Elle prend un argument le timestamp que nous avons trouvé ci-dessus. Si ce dernier n’est pas mentionné, localtime va utiliser d’une manière automatiqu time.time () pour renvoyer la date et l'heure du jour même.

Exemple :

Code :

print(time.localtime())
print(time.localtime(début))
print(time.localtime(fin))

Résultat d’exécution :

Afin de connaitre la correspondance de chaque attribut d’un objet, voir plus haut. Dans la plupart des cas, je pense que c'est évident. Dans tous les cas, la date et l'heure retournées ne sont pas claires. Le côté positif de les utiliser sous cette format est que si vous n'avez besoin que, notamment, de l'année et du jour, vous pouvez facilement extraire les informations.

3. La méthode mktime ()

Je vais présenter rapidement cette fonctionnalité, car vous l'utiliserez probablement moins fréquemment. L'idée est de récupérer le timestamp correspondant à partir de la structure représentant la date et l'heure retournées par localtime. Pour cela, nous utilisons la fonction mktime.

Exemple :

Code :

print(début)
temps = time.localtime(début)
print(temps)
temps_début = time.mktime(temps)
print(temps_début)

Résultat d’exécution :

4. La méthode sleep ()

Généralement, nous souhaitons toujours une exécution rapide de nos codes. Cependant, il est nécessaire d’arrêter cette dernière en utilisant la méthode sleep ()pour divers raisons à savoir :

  • Simuler les retards dans le programme.
  • Faire une pause entre les appels à l'API Web ou les demandes à la base de données.

Exemple :

Code :

time.sleep(3.5) # Mettre en veille pendant 3,5 secondes

Résultat d’exécution :

Comme illustré dans la capture d’écran, Jupyter Notebook s’arrêtera et vous devrez patienter 3,5 secondes pour l’affichage à nouveau de l’entrée suivante.

5. La méthode strftime ()

Regardons maintenant la méthode strftime. Il vous permet d'exprimer le format de la date et de l'heure avec des chaînes.

Cela nécessite deux arguments :

  • Une chaîne d’initialisation.
  • Un temps facultatif renvoyé par localtime. Si aucun temps n'est spécifié, la date et l'heure actuelles seront exploitées automatiquement.

Pour former la chaîne de formatage, on utilisera quelques caractères distincts. Le langage de programmation Python remplace ces symboles par leurs valeurs (le temps passé dans le deuxième paramètre, sinon il renvoie le temps actuel).

Exemple :

Code :

import time
time.strftime('%Y')

Résultat d’exécution :

Voyons un tableau résumant certains symboles qui peuvent être utilisés dans cette chaîne :

Symbole

Description

%A

jour de la semaine

%B

mois

%d

jour (0-31)

%H

L’heure (00-23)

%M

Minute (00-59)

%S

Seconde (00-59)

%Y

L’année

Exemple :

Code :

Pour afficher la date actuelle complète :

time.strftime("%A %d %B %Y %H:%M:%S")

Résultat d’exécution :

III. Le module datetime

Le module datetime fournit plusieurs classes qui représentent des dates et des heures. Dans cette section, vous ne trouverez rien d’absolument spectaculaire, mais nous évoluons progressivement vers une manière plus orientée objet de gérer les dates et les heures.

Datetime fournit trois classes, qui constituent l'interface principale que la plupart des gens utiliseront :

  • datetime.date est une date idéalisée, qui suppose que le calendrier grégorien s'étend indéfiniment dans le futur et le passé. L'objet stocke l'année, le mois et le jour sous forme d'attributs.
  • datetime.time est l'heure idéale. Elle suppose qu'il y a 86 400 secondes par jour et aucune seconde intercalaire. Cet objet stocke les heures, minutes, secondes, microsecondes et tzinfo (informations de fuseau horaire).
  • datetime.datetime est une combinaison de date et d'heure. Il possède tous les attributs des deux classes.

1. La méthode date ()

Syntaxe :

datetime.date(année, mois, jour)

Paramètres :

Tous les paramètres sont obligatoires.

Exemple :

Code :

import datetime
date = datetime.date(2020, 10, 7)
print(date)

Résultat d’exécution :

Vous pourriez être intéressés par deux types de méthodes date.today () et date.fromtimestamp(timestamp) qui retournent respectivement la date actuelle, et la date qui corresponde au paramètre timestamp.

Exemple :

Code :

import time
import datetime
aujourdhui = datetime.date.today()
print(aujourdhui)
datetime.date.fromtimestamp(time.time()) # Équivaut à date.today

Résultat d’exécution :

Bien sûr, vous pouvez facilement faire des opérations à ces dates et utiliser les opérateurs couramment utilisés pour la comparaison.

2. La méthode time ()

Syntaxe :

datetime.time(heure, minute, seconde, microseconde, tzinfo)

Paramètres :

Tous les paramètres sont facultatifs. tzinfo peut être None ou une instance d'une sous-classe tzinfo. Les paramètres restants doivent être des entiers dans les plages suivantes :

  • Les heures entre 0 et 24.
  • Les minutes entre 0 et 60.
  • Les secondes entre 0 et 60.
  • Les microsecondes entre 0 et 1 000 000.

3. La méthode datetime ()

On a traité une méthode de représentation d’heure, maintenant on va s’intéresser à la représentation de la date et de l’heure dans un seul objet. Cette classe est la plus utilisée et elle porte le même nom que son module datetime.

Cette classe utilise les arguments de datetime.date à savoir : l’année, le mois et jour, et prend également les paramètres de datetime.time notamment l’heure, les minutes, les secondes, les microsecondes et le fuseau horaire.

Voyons maintenant deux méthodes de la classe datetime utilisées dans la plupart des cas :

  • Datetime.now () : Cette première méthode permet de renvoyer un objet comportant la date et l’heure actuelles.
  • Datetime.fromtimestamp (timestamp) : Cette deuxième méthode permet de retourner la date et l’heure d’un horodatage (timestamp en anglais) exacte.

Exemple :

Code :

import datetime
datetime.datetime.now()

Résultat d’exécution :

4. La méthode timedelta ()

La fonction Python timedelta est disponible dans la bibliothèque datetime. Nous utilisons cette fonction timedelta pour calculer la différence entre deux dates. Vous pouvez également l'utiliser pour prédire les dates passées et futures.

Syntaxe :

datetime.timedelta(jour, seconde, microseconde, milliseconde, minute, heure, week)

Paramètres :

Tous les arguments sont facultatifs et prennent 0 pour valeur par défaut.

Exemple :

Code :

from datetime import timedelta
delta_time = timedelta(
days=40,
seconds=25,
microseconds=12,
milliseconds=22000,
minutes=5,
hours=8,
weeks=2
)
delta_time

Résultat d’exécution :

IV. Le module calendar

Le module Calendar de Python vous permet d'afficher le calendrier et de fournir des fonctions liées au calendrier.

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

Le calendrier est un objet très spécifique, vous ne l'utiliserez pas tous les jours. Si vous avez besoin de créer un calendrier, sachez simplement que le module existe.

Exemple :

Code :

import calendar
calendar.calendar(2020)

Résultat d’exécution :

V. Le module locale

Le module locale fait partie de la bibliothèque de prise en charge de l'internationalisation et de la localisation Python. Il fournit un moyen standard de gérer les opérations qui peuvent dépendre de la langue ou de l'emplacement de l'utilisateur. Par exemple, il met en forme les nombres en tant que devise, compare les chaînes pour le tri et utilise les dates.

Ce module contient des fonctions de formatage ou d'analyse des dates et heures selon les paramètres régionaux. C’est ainsi que l’utilisation des opérations numériques nécessite l’appel à des fonctions définies tel que format().

Exemple :

Code :

import locale
print(locale.setlocale(locale.LC_ALL, ''))
#### Pour renvoyer le symbole monétaire local.
print(locale.currency(762559748.49))
t=time()
print(format(t))

Résultat d’exécution :

VI. Exercices d’application

1. Exercice 1

a) Énoncé

Écrire un programme qui renvoie les dates des sept derniers jours avec le jour actuel inclus.

b) Corrigé

Code :

import datetime
today= datetime.datetime.today()
print(today - datetime.timedelta(days =1))
for i in range(7):
print(today - datetime.timedelta(days =i))

Résultat d’exécution :

2. Exercice 2

a) Enoncé

Écrire un programme qui affiche le temps de parcours d’une liste, d’un ensemble et d’un dictionnaire.

b) Corrigé

Code :

from time import time
Max=10**7
liste=[n*n for n in range(Max)]
ens= set(liste)
dic={}
for carré in liste:
dic[carré]=1
t_0= time()
for el in liste:
pass
t_1= time()
for el in ens :
pass
t_2 = time()
for el in dic :
pass
t_3 = time()
print("Le temps de parcourt d'une liste est : {} secondes".format(t_1-t_0))
print("Le temps de parcourt d'un ensemble est : {} secondes".format(t_2-t_1))
print("Le temps de parcourt d'un dictionnaire est : {} secondes".format(t_3-t_2))

Résultat d’exécution :

VII. Conclusion

Dans l'ensemble, nous pouvons dire que les modules Time et DateTime sont très similaires dans leur exploitation en langage Python. La disparité principale est que DateTime est plus orientée objet et sert à des opérations beaucoup plus délicates en terme de traitement et d'affichage. N'oubliez pas également les contributions des modules Calendrier et Locale.

Article publié le 12 Octobre 2020par Kaoutar OUAZZINE