Maîtriser les dates et heures en Python : Guide pratique
Un programme Python peut gérer les dates et heures de plusieurs façons. La conversion entre formats de date est une tâche courante pour les ordinateurs. Les modules time et calendar de Python aident à suivre les dates et heures.
Qu'est-ce qu'un Tick ?
Les intervalles de temps sont des nombres à virgule flottante en unités de secondes. Les instants particuliers dans le temps sont exprimés en secondes depuis 00:00:00 le 1er janvier 1970 (epoch).
Il existe un module time populaire disponible en Python qui fournit des fonctions pour travailler avec les temps et pour convertir entre représentations. La fonction time.time() retourne l'heure système actuelle en ticks depuis 00:00:00 le 1er janvier 1970 (epoch).
Exemple
Démonstration en direct#!/usr/bin/python import time; # Ceci est requis pour inclure le module time. ticks = time.time() print "Nombre de ticks depuis 12:00am, 1er janvier 1970:", ticks
Cela produirait un résultat tel que :
Nombre de ticks depuis 12:00am, 1er janvier 1970: 7186862.73399
L'arithmétique des dates est facile à faire avec les ticks. Cependant, les dates avant l'epoch ne peuvent pas être représentées sous cette forme. Les dates dans un futur lointain ne peuvent pas non plus être représentées de cette façon - le point de coupure est quelque part en 2038 pour UNIX et Windows.
Qu'est-ce qu'un TimeTuple ?
De nombreuses fonctions de temps de Python gèrent le temps comme un tuple de 9 nombres, comme indiqué ci-dessous :
| Index | Champ | Valeurs |
|---|---|---|
| 0 | Année sur 4 chiffres | 2008 |
| 1 | Mois | 1 à 12 |
| 2 | Jour | 1 à 31 |
| 3 | Heure | 0 à 23 |
| 4 | Minute | 0 à 59 |
| 5 | Seconde | 0 à 61 (60 ou 61 sont les secondes intercalaires) |
| 6 | Jour de la semaine | 0 à 6 (0 est lundi) |
| 7 | Jour de l'année | 1 à 366 (jour julien) |
| 8 | Économie de lumière du jour | -1, 0, 1, -1 signifie que la bibliothèque détermine DST |
Le tuple ci-dessus est équivalent à la structure struct_time. Cette structure a les attributs suivants :
| Index | Attributs | Valeurs |
|---|---|---|
| 0 | tm_year | 2008 |
| 1 | tm_mon | 1 à 12 |
| 2 | tm_mday | 1 à 31 |
| 3 | tm_hour | 0 à 23 |
| 4 | tm_min | 0 à 59 |
| 5 | tm_sec | 0 à 61 (60 ou 61 sont les secondes intercalaires) |
| 6 | tm_wday | 0 à 6 (0 est lundi) |
| 7 | tm_yday | 1 à 366 (jour julien) |
| 8 | tm_isdst | -1, 0, 1, -1 signifie que la bibliothèque détermine DST |
Obtenir l'heure actuelle
Pour traduire un instant de temps depuis une valeur à virgule flottante secondes depuis l'epoch en un time-tuple, passez la valeur à virgule flottante à une fonction (par exemple, localtime) qui retourne un time-tuple avec les neuf éléments valides.
Démonstration en direct#!/usr/bin/python import time; localtime = time.localtime(time.time()) print "Heure locale actuelle :", localtime
Cela produirait le résultat suivant, qui pourrait être formaté sous toute autre forme présentable :
Heure locale actuelle : time.struct_time(tm_year=2013, tm_mon=7, tm_mday=17, tm_hour=21, tm_min=26, tm_sec=3, tm_wday=2, tm_yday=198, tm_isdst=0)
Obtenir l'heure formatée
Vous pouvez formater n'importe quelle heure selon vos besoins, mais la méthode simple pour obtenir l'heure dans un format lisible est asctime() :
Démonstration en direct#!/usr/bin/python import time; localtime = time.asctime( time.localtime(time.time()) ) print "Heure locale actuelle :", localtime
Cela produirait le résultat suivant :
Heure locale actuelle : Tue Jan 13 10:17:09 2009
Obtenir le calendrier pour un mois
Le module calendar donne une large gamme de méthodes pour jouer avec les calendriers annuels et mensuels. Ici, nous affichons un calendrier pour un mois donné (Jan 2008) :
Démonstration en direct#!/usr/bin/python import calendar cal = calendar.month(2008, 1) print "Voici le calendrier:" print cal
Cela produirait le résultat suivant :
Voici le calendrier: January 2008 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
Le module time
Il existe un module time populaire disponible en Python qui fournit des fonctions pour travailler avec les temps et pour convertir entre représentations. Voici la liste de toutes les méthodes disponibles :
| N° | Fonction avec description |
|---|---|
| 1 | time.altzone Le décalage du fuseau horaire DST local, en secondes à l'ouest de UTC, s'il est défini. Ceci est négatif si le fuseau horaire DST local est à l'est de UTC (comme en Europe de l'Ouest, y compris le Royaume-Uni). N'utilisez ceci que si daylight est non nul. |
| 2 | time.asctime([tupletime]) Accepte un time-tuple et retourne une chaîne lisible de 24 caractères comme 'Tue Dec 11 18:07:14 2008'. |
| 3 | time.clock() Retourne le temps CPU actuel comme un nombre à virgule flottante de secondes. Pour mesurer les coûts computationnels de différentes approches, la valeur de time.clock est plus utile que celle de time.time(). |
| 4 | time.ctime([secs]) Comme asctime(localtime(secs)) et sans arguments est comme asctime(). |
| 5 | time.gmtime([secs]) Accepte un instant exprimé en secondes depuis l'epoch et retourne un time-tuple t avec l'heure UTC. Note : t.tm_isdst est toujours 0. |
| 6 | time.localtime([secs]) Accepte un instant exprimé en secondes depuis l'epoch et retourne un time-tuple t avec l'heure locale (t.tm_isdst est 0 ou 1, selon que DST s'applique à l'instant secs par les règles locales). |
| 7 | time.mktime(tupletime) Accepte un instant exprimé comme un time-tuple en heure locale et retourne une valeur à virgule flottante avec l'instant exprimé en secondes depuis l'epoch. |
| 8 | time.sleep(secs) Suspend le thread appelant pendant secs secondes. |
| 9 | time.strftime(fmt[,tupletime]) Accepte un instant exprimé comme un time-tuple en heure locale et retourne une chaîne représentant l'instant comme spécifié par la chaîne fmt. |
| 10 | time.strptime(str,fmt='%a %b %d %H:%M:%S %Y') Analyse str selon la chaîne de format fmt et retourne l'instant au format time-tuple. |
| 11 | time.time() Retourne l'instant de temps actuel, un nombre à virgule flottante de secondes depuis l'epoch. |
| 12 | time.tzset() Réinitialise les règles de conversion de temps utilisées par les routines de la bibliothèque. La variable d'environnement TZ spécifie comment cela est fait. |
Passons brièvement en revue les fonctions :
Il y a deux attributs importants disponibles avec le module time :
| N° | Attribut avec description |
|---|---|
| 1 | time.timezone L'attribut time.timezone est le décalage en secondes du fuseau horaire local (sans DST) par rapport à UTC (>0 dans les Amériques ; <=0 dans la plupart de l'Europe, Asie, Afrique). |
| 2 | time.tzname L'attribut time.tzname est un couple de chaînes dépendantes de la locale, qui sont les noms du fuseau horaire local sans et avec DST, respectivement. |
Le module calendar
Le module calendar fournit des fonctions liées au calendrier, y compris des fonctions pour imprimer un calendrier texte pour un mois ou une année donnés.
Par défaut, calendar prend le lundi comme premier jour de la semaine et le dimanche comme dernier. Pour changer cela, appelez la fonction calendar.setfirstweekday().
Voici une liste des fonctions disponibles avec le module calendar :
| N° | Fonction avec description |
|---|---|
| 1 | calendar.calendar(year,w=2,l=1,c=6) Retourne une chaîne multiligne avec un calendrier pour l'année year formaté en trois colonnes séparées par c espaces. w est la largeur en caractères de chaque date ; chaque ligne a une longueur de 21*w+18+2*c. l est le nombre de lignes pour chaque semaine. |
| 2 | calendar.firstweekday() Retourne le réglage actuel pour le jour de la semaine qui commence chaque semaine. Par défaut, quand calendar est importé pour la première fois, c'est 0, signifiant lundi. |
| 3 | calendar.isleap(year) Retourne True si year est une année bissextile ; sinon, False. |
| 4 | calendar.leapdays(y1,y2) Retourne le nombre total de jours bissextiles dans les années dans range(y1,y2). |
| 5 | calendar.month(year,month,w=2,l=1) Retourne une chaîne multiligne avec un calendrier pour le mois month de l'année year, une ligne par semaine plus deux lignes d'en-tête. w est la largeur en caractères de chaque date ; chaque ligne a une longueur de 7*w+6. l est le nombre de lignes pour chaque semaine. |
| 6 | calendar.monthcalendar(year,month) Retourne une liste de listes d'entiers. Chaque sous-liste dénote une semaine. Les jours en dehors du mois month de l'année year sont mis à 0 ; les jours dans le mois sont mis à leur jour du mois, 1 et plus. |
| 7 | calendar.monthrange(year,month) Retourne deux entiers. Le premier est le code du jour de la semaine pour le premier jour du mois month dans l'année year ; le second est le nombre de jours dans le mois. Les codes de jours de semaine sont 0 (lundi) à 6 (dimanche) ; les numéros de mois sont 1 à 12. |
| 8 | calendar.prcal(year,w=2,l=1,c=6) Comme print calendar.calendar(year,w,l,c). |
| 9 | calendar.prmonth(year,month,w=2,l=1) Comme print calendar.month(year,month,w,l). |
| 10 | calendar.setfirstweekday(weekday) Définit le premier jour de chaque semaine au code de jour de semaine weekday. Les codes de jours de semaine sont 0 (lundi) à 6 (dimanche). |
| 11 | calendar.timegm(tupletime) L'inverse de time.gmtime : accepte un instant de temps sous forme de time-tuple et retourne le même instant comme un nombre à virgule flottante de secondes depuis l'epoch. |
| 12 | calendar.weekday(year,month,day) Retourne le code du jour de la semaine pour la date donnée. Les codes de jours de semaine sont 0 (lundi) à 6 (dimanche) ; les numéros de mois sont 1 (janvier) à 12 (décembre). |
Autres modules et fonctions
Si vous êtes intéressé, voici une liste d'autres modules et fonctions importants pour jouer avec les dates et heures en Python :
Le module datetime
Le module pytz
Le module dateutil
Python
- Maîtriser les types de données Python : Guide pratique
- Maîtriser les opérateurs Python : Guide complet
- Maîtriser l'instruction pass en Python : Guide pratique
- Maîtriser les arguments de fonctions Python : Positionnels, nommés et paramètres par défaut
- Maîtriser les dictionnaires Python : création, manipulation et techniques avancées
- Maîtriser Python datetime : guide pratique pour les dates, heures et fuseaux horaires
- Récupérer la date et l'heure actuelles en Python : Guide pratique
- Python : Récupérer l'heure actuelle et les données de fuseau horaire facilement
- Maîtriser le module time de Python : Fonctions, structures et exemples pratiques