Aller au contenu
Accueil » La librairie « Time » en Python

La librairie « Time » en Python

    La librairie « time » en Python est une librairie qui permet de manipuler les dates et les temps dans vos programmes Python. Cette librairie fournit des fonctions pour effectuer des opérations de mesures de temps comme la durée d’exécution de code et la manipulation des dates et heures.

    la librairie time en Python

    La librairie « Time » est particulièrement utile dans les programmes qui doivent effectuer des opérations en temps réel pour des calculs de performances ou gérer la date d’exécution d’une action. Nous verrons dans cet article les fonctions utiles de cette librairie.

    Définition de l’ « epoch time »

    Le terme « epoch » que nous pouvons traduire en « époque » représente la date de départ pour la mesure du temps. sur un système d’exploitation. L’ « epoch time » ou aussi appelé « Unix Epoch Time » ou « POSIX Time » est fixé représente la date du 1 janvier 1970 00h00 sur le fuseau horaire GMT (ou UTC). « POSIX » signifie « Portable Operating System Interface uniX ». C’est un standard d’interface pour les systèmes UNIX, comme Linux par exemple. Suivant les systèmes d’exploitation, la date de départ n’est pas forcément la même. Plus d’informations sont décrites sur ce lien.

    La donnée retournée sera alors en secondes à partir de l’ « epoch time ». Si on considère un entier codé sur 32 bits, on sera donc limité en terme de capacité. En faisant le calcul Il est intéressant de voir que sur les systèmes 32 bits, nous ne pourrons pas aller au-delà de la date du 19 janvier 2038. Heureusement pour nous, les systèmes 64 bits sont arrivés 🙂 Si vous souhaitez plus de détails sur les variables et comment elles sont codées dans la mémoire, voici un article qui traite le sujet.

    from datetime import datetime
    
    t = 2**31 - 1
    print(datetime.fromtimestamp(t))
    >>> "2038-01-19 04:14:07"
    
    Python

    La fonction time()

    Certainement la fonction la plus utilisée, elle permet de récupérer le temps en secondes depuis ce fameux « epoch time » au moment de l’appel de la fonction. Stocké dans une variable, vous pourrez facilement chronométrer le temps d’exécution d’une fonction en appelant une seconde fois cette fonction en fin d’exécution.

    t1 = time.time()
    # réaliser vos actions
    t2 = time.time()
    dt = t2 - t1
    print(f'{dt} secondes se sont passées')
    Python

    La fonction localtime() et gmtime()

    time.localtime([secs])
    time.gmtime([secs])

    La fonction « localtime() » renvoie le temps en seconde depuis l’ « epoch time » tout comme la fonction time mais de manière structurée avec le fuseau horaire du système. Si vous souhaitez l’heure au format GMT, vous pourrez utiliser la fonction « gmtime() ». Ces deux fonctions prennent comme argument optionnel un nombre permettant de définir une date précise. Si vous ne donnez aucun argument, ce sera la valeur renvoyée par la fonction « time() ».

    import time
    
    t = 1.8 * 10**9  # Vendredi 15 janvier 2027
    print(time.gmtime(t))
    print(time.localtime(t))
    
    >>> time.struct_time(tm_year=2027, tm_mon=1, tm_mday=15, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=15, tm_isdst=0)
    >>> time.struct_time(tm_year=2027, tm_mon=1, tm_mday=15, tm_hour=9, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=15, tm_isdst=0)
    Python

    Comme mon lieu de résidence à 1h de décalage avec l’heure de référence UTC. Le drapeau ou « flag » nommé « tm_isdst » prend une valeur de 1 quand l’heure d’été s’applique ce qui n’est pas le cas ici.

    La fonction ctime()

    time.ctime([secs])

    Cette fonction convertit une heure exprimée en secondes depuis l’ « epoch time » en une chaîne de caractère avec un format prédéfini qui est le suivant : ‘Sun Jun 20 23:21:05 1993’. Le numéro du jour est un champ sur deux caractères complété par un espace si celui-ci n’a qu’un seuil chiffre.

    import time
    
    t1 = 1.8 * 10**9  # Vendredi 15 janvier 2027
    t2 = 1.82 * 10**9  # Vendredi 3 septembre 2027
    print(time.ctime(t1))
    print(time.ctime(t2))
    
    >>> "Fri Jan 15 09:00:00 2027"
    >>> "Fri Sep  3 21:33:20 2027"
    
    Python

    La fonction strftime()

    time.strftime(format[, t])

    Cette fonction convertit une donnée de temps structurée renvoyée par les fonctions « gmtime() » ou « localtime() » en une chaîne de caractère dont le format est défini dans le premier argument. L’argument « t » est facultatif. Dans le cas où vous précisez rien, la fonction utilisera la valeur renvoyée par « time() » au moment de l’appel de la fonction.

    import time
    
    t = 1.8 * 10**9  # Vendredi 15 janvier 2027
    local_time = time.localtime(t)
    print(time.strftime("%y-%m-%d",local_time))
    print(time.strftime("%d/%m/%Y",local_time))
    print(time.strftime("%a, %d %b %Y %H:%M:%S +0000",local_time))
    
    >>> "27-01-15"
    >>> "15/01/2027"
    >>> "Fri, 15 Jan 2027 09:00:00 +0000"
    Python

    La fonction strptime()

    time.strptime(string[, format])

    Cette fonction réalise l’opération inverse de « strftime() ». En analysant la date en chaîne de caractère, la fonction renvoie une heure structurée comme le ferait les fonctions « gmtime() » ou « localtime() ». L’argument « format » est optionnel. Si celui-ci n’est pas fourni, il prendra par défaut le format renvoyé par la fonction « ctime() » vue précédemment.

    import time
    print(time.strptime("15/01/2027","%d/%m/%Y")
    
    >>> time.struct_time(tm_year=2027, tm_mon=1, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=15, tm_isdst=-1)
    Python

    La fonction sleep()

    time.sleep(secs)

    La fonction « sleep() » quant à elle permet de suspendre l’exécution du programme pendant le nombre de secondes donné en argument. Cette instruction est très pratique lorsque vous souhaitez réaliser une action à chaque intervalle de temps donné.

    import time
    
    t1 = time.time()
    time.sleep(3)
    t2 = time.time()
    dt = t2 - t1
    print(f"Il s'est passé {dt:.1f} secondes")
    
    >>> "Il s'est passé 3.0 secondes"
    Python

    La fonction perf_counter()

    time.perf_counter()

    Cette fonction permet de renvoyer en une fraction de secondes un compteur de performance. Elle permet d’être précise sur de très courte durée. En général, récupérer l’heure avec la fonction « time() » vous conviendra dans 99% des cas mais c’est intéressant de savoir qu’une fonction comme celle-ci existe.

    import time
    
    t1 = time.perf_counter()
    time.sleep(3)
    t2 = time.perf_counter()
    dt = t2 - t1
    print(f"Il s'est passé {dt:.1f} secondes")
    
    >>> "Il s'est passé 3.0 secondes"
    Python

    La fonction process_time()

    time.process_time()

    Cette fonction permet de mesurer le temps d’utilisation du processeur de la machine sur lequel vous faites tourner votre programme. Cette fonction permet de s’affranchir des temps d’attente généré par la fonction « time.sleep() » par exemple.

    import time
    
    # t1 = time.time()
    t1 = time.process_time()
    time.sleep(3)
    t2 = time.process_time()
    dt = t2 - t1
    print(f"Le processeur a été utilisé pendant {dt:.1f} secondes")
    
    >>> "Le processeur a été utilisé pendant 0.0 secondes"
    Python

    Pour aller plus loin …

    En résumé, la librairie « Time » en Python est une librairie standard très utile pour manipuler les dates et les temps. Comme vous avez pu le voir, elle offre une panoplie de fonctions utiles pour manipuler des données horaires. Toutes les fonctions n’ont pas été décrites ici, si vous n’avez pas trouvé une fonction qui répond à votre problème, je vous invite à parcourir la documentation que vous trouverez avec ce lien.

    Un dernier point important est de noter que la librairie « Time » utilise l’heure du système sur lequel vous faites fonctionner le programme. Généralement, la précision des systèmes est de l’ordre de la seconde, si celui-ci est bien à jour. Cet ordre de grandeur est bon à savoir suivant les applications que vous souhaitez mettre en place.

    N’hésitez pas à laisser un commentaire, j’y répondrai avec plaisir,
    A bientôt,
    Benjamin

    Si vous avez aimé l'article, vous êtes libres de le partager ! :)

    Laisser un commentaire

    Récupérez votre guide pour débuter en Python. Je vous offre plus de 80 pages pour partir sur de bonnes bases !