Python Date et heure

Les programmes Python peuvent gérer les dates et les heures de nombreuses façons, et la conversion des formats de date est une fonctionnalité courante.

Python fournit les modules time et calendar qui peuvent être utilisés pour formater les dates et les heures.

Les intervalles de temps sont des nombres à virgule flottante en secondes.

Chaque horodatage est exprimé comme le temps écoulé depuis minuit (epoch) le 1er janvier 1970.

Le module time en Python possède de nombreuses fonctions pour convertir les formats de date courants. Par exemple, la fonction time.time() est utilisée pour obtenir l'horodatage actuel, comme dans l'exemple suivant :

Exemples (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time # Importer le module time ticks = time.time() print "L'horodatage actuel est :", ticks

La sortie de l'exemple ci-dessus est :

当前时间戳为: 1459994552.51

L'unité d'horodatage est la plus adaptée à l'arithmétique des dates. Cependant, les dates antérieures à 1970 ne peuvent pas être représentées de cette manière. Les dates trop éloignées dans le futur ne fonctionneront pas non plus, car UNIX et Windows ne prennent en charge que jusqu'en 2038.



Qu'est-ce qu'un tuple de temps ?

De nombreuses fonctions Python traitent le temps comme un tuple de 9 groupes de nombres :

Non.ChampValeur
0Année sur 4 chiffres2008
1month1 à 12
2jour1 à 31
3Heure0 à 23
4Minute0 à 59
5second0 à 61 (60 ou 61 sont des secondes intercalaires)
6Jour de la semaine0 à 6 (0 correspond à lundi)
7Jour de l'année1 à 366 (calendrier julien)
8Heure d'été-1, 0, 1; -1 est un indicateur permettant de déterminer s'il s'agit de l'heure d'été

Ce qui précède est le tuple struct_time. Cette structure possède les attributs suivants :

Non.AttributValeur
0tm_year2008
1tm_mon1 à 12
2tm_mday1 à 31
3tm_hour0 à 23
4tm_min0 à 59
5tm_sec0 à 61 (60 ou 61 sont des secondes intercalaires)
6tm_wday0 à 6 (0 correspond à lundi)
7tm_yday1 à 366 (calendrier julien)
8tm_isdst-1, 0, 1; -1 est un indicateur permettant de déterminer s'il s'agit de l'heure d'été


Obtenir l'heure actuelle

Pour convertir un horodatage exprimé sous forme de nombre à virgule flottante en un tuple de temps, il suffit de passer le nombre à virgule flottante à une fonction telle que localtime.

Exemples (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time localtime = time.localtime(time.time()) print "L'heure locale est :", localtime

La sortie de l'exemple ci-dessus est :

本地时间为 : time.struct_time(tm_year=2016, tm_mon=4, tm_mday=7, tm_hour=10, tm_min=3, tm_sec=27, tm_wday=3, tm_yday=98, tm_isdst=0)


Obtenir l'heure formatée

Vous pouvez choisir différents formats selon vos besoins, mais la fonction la plus simple pour obtenir un format d'heure lisible est asctime() :

Exemples (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time localtime = time.asctime( time.localtime(time.time()) ) print "L'heure locale est :", localtime

La sortie de l'exemple ci-dessus est :

本地时间为 : Thu Apr  7 10:05:21 2016

Format de date

Nous pouvons utiliser la méthode strftime du module time pour formater les dates :

time.strftime(format[, t])

Exemple de démonstration :

Exemples (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import time # Formaté comme 2016-03-20 11:45:39 print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # Formaté comme Sat Mar 28 22:24:24 2016 print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) # Convertir la chaîne de format en horodatage a = "Sat Mar 28 22:24:24 2016" print time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))

La sortie de l'exemple ci-dessus est :

2016-04-07 10:25:09
Thu Apr 07 10:25:09 2016
1459175064.0

Symboles de formatage de date et d'heure en Python :

  • %y Représentation de l'année sur deux chiffres (00-99)
  • %Y Représentation de l'année sur quatre chiffres (000-9999)
  • %m Mois (01-12)
  • %d Jour du mois (0-31)
  • %H Heure au format 24 heures (0-23)
  • %I Heure au format 12 heures (01-12)
  • %M Minute (00-59)
  • %S Seconde (00-59)
  • %a Nom abrégé du jour de la semaine selon la locale
  • %A Nom complet du jour de la semaine selon la locale
  • %b Nom abrégé du mois selon la locale
  • %B Nom complet du mois selon la locale
  • %c Représentation appropriée de la date et de l'heure selon la locale
  • %j Jour de l'année (001-366)
  • %p Équivalent de A.M. ou P.M. selon la locale
  • %U Numéro de semaine de l'année (00-53), dimanche comme premier jour de la semaine
  • %w Jour de la semaine (0-6), dimanche comme premier jour de la semaine
  • %W Numéro de semaine de l'année (00-53), lundi comme premier jour de la semaine
  • %x Représentation appropriée de la date selon la locale
  • %X Représentation appropriée de l'heure selon la locale
  • %Z Nom du fuseau horaire actuel
  • %% Le caractère % lui-même

Obtenir le calendrier d'un mois

Le module Calendar dispose d'un large éventail de méthodes pour gérer les calendriers annuels et mensuels, par exemple, imprimer le calendrier d'un mois :

Exemples (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- import calendar cal = calendar.month(2016, 1) print "Ce qui suit affiche le calendrier pour janvier 2016 :" print cal

La sortie de l'exemple ci-dessus est :

以下输出2016年1月份的日历:
    January 2016
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


Module Time

Le module Time contient les fonctions intégrées suivantes, à la fois pour le traitement du temps et pour la conversion des formats de temps :

Non.Fonction et description
1time.altzone
Renvoie le décalage en secondes de la région de l'heure d'été (DST) à l'ouest de Greenwich. Si la région est à l'est de Greenwich, une valeur négative est renvoyée (comme l'Europe occidentale, y compris le Royaume-Uni). Disponible uniquement pour les régions où l'heure d'été est activée.
2time.asctime([tupletime])
Accepte un tuple de temps et renvoie une chaîne lisible de 24 caractères sous la forme "Tue Dec 11 18:07:14 2008" (11 décembre 2008, mardi, 18:07:14).
3time.clock( )
Renvoie le temps CPU actuel sous la forme d'un nombre à virgule flottante de secondes. Utilisé pour mesurer le temps écoulé de différents programmes, plus utile que time.time().
4time.ctime([secs])
Il est équivalent à asctime(localtime(secs)) ; lorsqu'aucun argument n'est donné, il est équivalent à asctime().
5time.gmtime([secs])
Accepte un horodatage (secondes à virgule flottante écoulées depuis l'époque 1970) et renvoie un tuple de temps t en temps moyen de Greenwich (GMT). Remarque : t.tm_isdst vaut toujours 0.
6time.localtime([secs])
Accepte un horodatage (secondes à virgule flottante écoulées depuis l'époque 1970) et renvoie un tuple de temps t en heure locale (t.tm_isdst peut valoir 0 ou 1, selon que l'heure d'été est en vigueur localement à ce moment-là).
7time.mktime(tupletime)
Accepte un tuple de temps et renvoie un horodatage (secondes à virgule flottante écoulées depuis l'époque 1970).
8time.sleep(secs)
Retarde l'exécution du thread appelant, secs est en secondes.
9time.strftime(fmt[,tupletime])
Accepte un tuple de temps et renvoie l'heure locale sous forme de chaîne lisible ; le format est déterminé par fmt.
10time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')
Analyse une chaîne de temps en un tuple de temps selon le format fmt.
11time.time( )
Renvoie l'horodatage de l'heure actuelle (secondes en virgule flottante écoulées depuis l'époque 1970).
12time.tzset()
Réinitialise les paramètres liés au temps en fonction de la variable d'environnement TZ.

Le module Time contient les 2 attributs très importants suivants :

Non.Attribut et description
1time.timezone
L'attribut time.timezone est le décalage en secondes du fuseau horaire local (sans heure d'été) par rapport à Greenwich (>0, Amériques ; <=0, la majeure partie de l'Europe, de l'Asie, de l'Afrique).
2time.tzname
L'attribut time.tzname contient une paire de chaînes qui diffèrent selon la situation, à savoir le nom du fuseau horaire local avec l'heure d'été et celui sans celle-ci.


Module Calendar

Les fonctions de ce module sont toutes liées au calendrier, par exemple, imprimer le calendrier mensuel sous forme de caractères d'un mois.

Lundi est le premier jour de la semaine par défaut, et dimanche est le dernier jour par défaut. Pour modifier ce paramètre, vous devez appeler la fonction calendar.setfirstweekday(). Le module contient les fonctions intégrées suivantes :

Non.Fonction et description
1calendar.calendar(year,w=2,l=1,c=6)
Renvoie une chaîne de caractères multiligne représentant le calendrier de l'année (year), avec 3 mois par ligne, séparés par une distance de c. L'intervalle de largeur quotidien est de w caractères. La longueur de chaque ligne est 21* W+18+2* C. l est le nombre de lignes par semaine.
2calendar.firstweekday( )
Renvoie le paramètre du jour de début actuel de la semaine. Par défaut, lorsque le module calendar est chargé pour la première fois, il renvoie 0, ce qui correspond à lundi.
3calendar.isleap(year)

Renvoie True s'il s'agit d'une année bissextile, sinon renvoie False.

>>> import calendar
>>> print(calendar.isleap(2000))
True
>>> print(calendar.isleap(1900))
False
4calendar.leapdays(y1,y2)
Renvoie le nombre total d'années bissextiles entre les années Y1 et Y2.
5calendar.month(year,month,w=2,l=1)
Renvoie une chaîne calendrier multiligne pour l'année year et le mois month, avec un titre sur deux lignes et une ligne par semaine. L'intervalle de largeur quotidien est de w caractères. La longueur de chaque ligne est 7*w+6. l est le nombre de lignes pour chaque semaine.
6calendar.monthcalendar(year,month)
Renvoie une liste imbriquée à un seul niveau d'entiers. Chaque sous-liste contient des entiers représentant une semaine. Les dates en dehors de l'année year et du mois month sont définies à 0 ; les jours dans l'intervalle sont représentés par le jour de ce mois, à partir de 1.
7calendar.monthrange(year,month)
Renvoie deux entiers. Le premier est le code de date du jour de la semaine de ce mois, et le second est le code de date de ce mois. Les jours vont de 0 (lundi) à 6 (dimanche) ; les mois de 1 à 12.
8calendar.prcal(year,w=2,l=1,c=6)
Équivalent àprint calendar.calendar(year,w=2,l=1,c=6)。
9calendar.prmonth(year,month,w=2,l=1)
Équivalent àprint calendar.month(year,month,w=2,l=1) 。
10calendar.setfirstweekday(weekday)
Définit le code de date de début pour chaque semaine. De 0 (lundi) à 6 (dimanche).
11calendar.timegm(tupletime)
L'inverse de time.gmtime : accepte un tuple de temps et renvoie l'horodatage de ce moment (secondes à virgule flottante écoulées depuis l'époque de 1970).
12calendar.weekday(year,month,day)
Renvoie le code de date pour la date donnée. 0 (lundi) à 6 (dimanche). Les mois vont de 1 (janvier) à 12 (décembre).


Autres modules et fonctions connexes

En Python, d'autres modules pour gérer les dates et les heures incluent :

Autres extensions