Date et Heure en Python
Date et Heure en Python
Section titled “Date et Heure en Python”La gestion des dates et des heures est une exigence courante en programmation. Python offre des modules puissants pour travailler avec les dates, les heures et les intervalles de temps.
Les principaux modules intégrés sont :
time: Fournit des fonctions liées à l’heure système, y compris la mesure du temps et la mise en veille. Souvent de plus bas niveau.datetime: Offre des classes pour manipuler les dates et les heures de manière plus orientée objet. Généralement préféré pour la plupart des calculs et représentations de date/heure.calendar: Fournit des fonctions liées au calendrier, comme la génération de calendriers textuels.
Époque et Ticks
Section titled “Époque et Ticks”De nombreux systèmes mesurent le temps comme le nombre de secondes écoulées depuis un point de départ spécifique appelé l’Époque. Pour les systèmes basés sur Unix (y compris Linux et macOS), l’époque est typiquement le 1er janvier 1970, 00:00:00 (UTC). Windows peut utiliser une époque différente pour certaines fonctions système, mais le module time de Python utilise systématiquement l’époque Unix.
La fonction time.time() renvoie l’heure actuelle sous la forme d’un nombre à virgule flottante représentant les secondes écoulées depuis l’époque. Cette valeur est parfois appelée « timestamp Unix » ou « ticks » (bien que ‘ticks’ puisse avoir d’autres significations dans différents contextes).
Exemple : Obtenir les secondes depuis l’époque
Section titled “Exemple : Obtenir les secondes depuis l’époque”#!/usr/bin/env python3import time
seconds_since_epoch = time.time()print(f"Secondes depuis l'époque : {seconds_since_epoch}")Cela produirait une sortie similaire à :
Secondes depuis l'époque : 1678886400.123456Travailler directement avec les secondes de l’époque peut être utile pour de simples calculs de différence de temps, mais la représentation de dates et d’heures spécifiques nécessite généralement des formats plus structurés.
Structures de temps (struct_time)
Section titled “Structures de temps (struct_time)”Plusieurs fonctions du module time travaillent avec ou renvoient un objet de type tuple appelé time.struct_time. Il représente un point spécifique dans le temps avec des composants comme l’année, le mois, le jour, l’heure, la minute, etc.
La structure contient les attributs suivants (accessibles par index ou par nom) :
| Index | Attribut | Valeurs |
|---|---|---|
| 0 | tm_year | Année (par exemple, 2023) |
| 1 | tm_mon | Mois (1-12) |
| 2 | tm_mday | Jour du mois (1-31) |
| 3 | tm_hour | Heure (0-23) |
| 4 | tm_min | Minute (0-59) |
| 5 | tm_sec | Seconde (0-61 ; inclut les secondes intercalaires) |
| 6 | tm_wday | Jour de la semaine (0=Lundi à 6=Dimanche) |
| 7 | tm_yday | Jour de l’année (1-366) |
| 8 | tm_isdst | Indicateur d’heure d’été (0, 1, ou -1 si inconnu) |
Obtention de l’heure actuelle sous forme de struct_time
Section titled “Obtention de l’heure actuelle sous forme de struct_time”time.localtime() convertit les secondes depuis l’époque (ou l’heure actuelle si aucun argument n’est donné) en un struct_time représentant l’heure locale.
#!/usr/bin/env python3import time
local_time_struct = time.localtime() # Utilise l'heure actuelleprint(f"Structure de temps locale : {local_time_struct}")
# Accès aux élémentsprint(f"Année : {local_time_struct.tm_year}")print(f"Heure : {local_time_struct.tm_hour}")time.gmtime() fonctionne de manière similaire mais renvoie le struct_time en Temps Universel Coordonné (UTC).
Formatage de l’heure
Section titled “Formatage de l’heure”Bien que struct_time soit structuré, il n’est pas très lisible par l’homme. Python fournit des fonctions pour formater le temps en chaînes de caractères.
time.asctime() : Convertit un struct_time (ou l’heure locale actuelle si aucun argument) en une chaîne de caractères standard de 24 caractères.
#!/usr/bin/env python3import time
# Utilisation de l'heure locale actuelleascii_time_now = time.asctime()print(f"Heure formatée (asctime) : {ascii_time_now}")
# Utilisation d'un struct_time spécifiquelocal_time_struct = time.localtime()ascii_time_local = time.asctime(local_time_struct)print(f"Heure formatée à partir de struct : {ascii_time_local}")La sortie pourrait ressembler à : Heure formatée (asctime) : Mer Mar 15 12:30:00 2023
time.strftime() : Offre beaucoup plus de flexibilité en permettant des codes de format personnalisés.
#!/usr/bin/env python3import time
local_time_struct = time.localtime()
# Exemples de codes de format :# %Y - Année avec siècle (par exemple, 2023)# %m - Mois en décimal avec zéro initial (01-12)# %d - Jour du mois en décimal avec zéro initial (01-31)# %H - Heure (horloge 24h) en décimal avec zéro initial (00-23)# %M - Minute en décimal avec zéro initial (00-59)# %S - Seconde en décimal avec zéro initial (00-61)# %a - Nom abrégé du jour de la semaine (Dim, Lun, ...)# %A - Nom complet du jour de la semaine (Dimanche, Lundi, ...)# %b - Nom abrégé du mois (Jan, Fév, ...)# %B - Nom complet du mois (Janvier, Février, ...)
formatted_string = time.strftime("%Y-%m-%d %H:%M:%S", local_time_struct)print(f"Format personnalisé 1 : {formatted_string}")
formatted_string_verbose = time.strftime("%A, %B %d, %Y (%I:%M:%S %p %Z)", local_time_struct)# %I - Heure (horloge 12h), %p - AM/PM, %Z - Nom du fuseau horaireprint(f"Format personnalisé 2 : {formatted_string_verbose}")strftime est très utile pour créer des chaînes de date/heure lisibles par l’homme dans divers formats.
Référence du module time
Section titled “Référence du module time”Fonctions clés du module time :
| Fonction | Description |
|---|---|
time.time() | Renvoie l’heure actuelle en secondes depuis l’époque (flottant). |
time.sleep(secs) | Suspend l’exécution pendant le nombre de secondes spécifié (peut être un flottant). |
time.localtime([secs]) | Convertit les secondes depuis l’époque en struct_time locale. |
time.gmtime([secs]) | Convertit les secondes depuis l’époque en struct_time UTC. |
time.mktime(t) | Convertit un struct_time local t en secondes depuis l’époque. |
time.asctime([t]) | Convertit un struct_time t en une chaîne formatée standard. |
time.strftime(format[, t]) | Formate un struct_time t en une chaîne selon les codes de format. |
time.strptime(string, format) | Analyse une string représentant une heure selon les codes de format, renvoyant un struct_time. |
time.perf_counter() | Renvoie une valeur de compteur de performance haute résolution (pour mesurer de courtes durées). La valeur absolue est indéfinie, seule la différence entre les appels est valide. |
time.process_time() | Renvoie la somme du temps CPU système et utilisateur du processus actuel. Utilisé pour l’évaluation de l’utilisation du CPU. |
Remarque : time.clock() a été déprécié en Python 3.3 et supprimé en 3.8. Utilisez time.perf_counter() ou time.process_time() à la place, selon que vous avez besoin du temps réel (wall-clock time) pour la mesure des performances ou du temps CPU.
Le module datetime (Approche moderne)
Section titled “Le module datetime (Approche moderne)”Bien que le module time soit utile, le module datetime offre une manière plus puissante et orientée objet de travailler avec les dates et les heures. Il est généralement recommandé pour la plupart des applications.
Classes clés dans datetime :
datetime.date: Représente une date (année, mois, jour).datetime.time: Représente une heure (heure, minute, seconde, microseconde).datetime.datetime: Représente à la fois la date et l’heure.datetime.timedelta: Représente une durée ou une différence entre deux dates ou heures.datetime.timezone: Représente les informations de fuseau horaire (une gestion plus robuste des fuseaux horaires nécessite souvent des bibliothèques externes commepytzou utilisezoneinfoà partir de Python 3.9+).
Exemple : Utilisation de datetime
Section titled “Exemple : Utilisation de datetime”#!/usr/bin/env python3from datetime import datetime, date, timedelta
# Obtenir la date et l'heure actuellesnow = datetime.now()print(f"Datetime actuelle : {now}")
# Obtenir la date actuelletoday = date.today()print(f"Date actuelle : {today}")
# Créer des objets date et datetime spécifiquesd1 = date(2024, 7, 20) dt1 = datetime(2024, 7, 20, 15, 30, 0)print(f"Date spécifique : {d1}")print(f"Datetime spécifique : {dt1}")
# Formatage utilisant strftime (également disponible sur les objets datetime)print(f"Datetime formatée : {now.strftime('%Y/%m/%d %H:%M')}")
# Arithmétique de date utilisant timedeltayesterday = today - timedelta(days=1)next_week = today + timedelta(weeks=1)print(f"Hier était : {yesterday}")print(f"La semaine prochaine sera : {next_week}")
# Calculer la différence entre les datetimesdiff = now - dt1print(f"Différence entre maintenant et dt1 : {diff}")print(f"Différence en secondes : {diff.total_seconds()}")
# Analyse de chaînes en objets datetimedate_string = "2023-01-15 10:00:00"parsed_dt = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")print(f"Datetime analysée : {parsed_dt}")Le module datetime offre une interface plus propre pour l’arithmétique et la manipulation des dates et des heures par rapport à time.struct_time.
Le module calendar
Section titled “Le module calendar”Le module calendar fournit des fonctions liées au calendrier, comme la génération de calendriers textuels mensuels ou annuels et la détermination des années bissextiles.
Exemple : Affichage du calendrier d’un mois
Section titled “Exemple : Affichage du calendrier d’un mois”#!/usr/bin/env python3import calendar
# Obtenir un calendrier textuel formaté pour mars 2024cal_text = calendar.month(2024, 3)print("Calendrier pour mars 2024 :")print(cal_text)
# Vérifier si c'est une année bissextileis_leap = calendar.isleap(2024)print(f"Est-ce que 2024 est une année bissextile ? {is_leap}")
# Obtenir le code du jour de la semaine pour une date spécifique (0=Lundi)weekday_code = calendar.weekday(2024, 3, 15)print(f"Code du jour de la semaine pour 2024-03-15 : {weekday_code} (Vendredi)")
# Définir le premier jour de la semaine (par exemple, Dimanche = 6)# calendar.setfirstweekday(calendar.SUNDAY)# cal_text_sun_start = calendar.month(2024, 3)# print("\nCalendrier commençant le dimanche :")# print(cal_text_sun_start)Autres bibliothèques utiles
Section titled “Autres bibliothèques utiles”Pour une gestion plus avancée des dates/heures, notamment impliquant les fuseaux horaires ou l’analyse de chaînes de date complexes, considérez ces bibliothèques tierces populaires :