Python3 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 des modules time et calendar qui peuvent être utilisés pour formater les dates et les heures.

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

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

Il existe de nombreuses fonctions dans le module time de Python qui peuvent convertir des formats de date courants. Par exemple, la fonction time.time() est utilisée pour obtenir l'horodatage actuel, comme dans l'exemple ci-dessous :

Exemples

#!/usr/bin/python3

import time  # importer le module time

ticks = time.time()
print ("Horodatage actuel :", ticks)

La sortie de l'exemple ci-dessus est :

当前时间戳为: 1459996086.7115328

Les unités d'horodatage sont les plus appropriées pour les calculs de dates. Cependant, les dates antérieures à 1970 ne peuvent pas être représentées de cette façon. Les dates trop éloignées dans le futur ne sont pas non plus possibles, 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 à l'aide d'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 déterminant 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_ydayJour de l'année, 1 à 366
8tm_isdstIndique s'il s'agit de l'heure d'été, valeurs : 1 (heure d'été), 0 (pas d'heure d'été), -1 (inconnu), valeur par défaut -1


Obtenir l'heure actuelle

Pour convertir un horodatage renvoyant un nombre à virgule flottante en tuple de temps, il suffit de passer le nombre à virgule flottante à des fonctions comme localtime.

#!/usr/bin/python3

import time

localtime = time.localtime(time.time())
print ("本地时间为 :", 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=28, tm_sec=49, 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 modèle de temps lisible est asctime() :

#!/usr/bin/python3

import time

localtime = time.asctime( time.localtime(time.time()) )
print ("本地时间为 :", localtime)

La sortie de l'exemple ci-dessus est :

本地时间为 : Thu Apr  7 10:29:13 2016

Formater les dates

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

time.strftime(format[, t])

Exemples

#!/usr/bin/python3

import time

# Formater sous la forme 2016-03-20 11:45:39
print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

# Formater sous la forme Sat Mar 28 22:24:24 2016
print (time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
 
# Convertir une 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:29:46
Thu Apr 07 10:29:46 2016
1459175064.0

Symboles de formatage de l'heure et de la date 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 Minutes (00-59)
  • %S Secondes (00-59)
  • %a Nom abrégé local du jour de la semaine
  • %A Nom complet local du jour de la semaine
  • %b Nom abrégé local du mois
  • %B Nom complet local du mois
  • %c Représentation locale appropriée de la date et de l'heure
  • %j Jour de l'année (001-366)
  • %p Équivalent local de A.M. ou P.M.
  • %U Numéro de semaine de l'année (00-53), dimanche est le premier jour de la semaine
  • %w Jour de la semaine (0-6), dimanche est le premier jour de la semaine
  • %W Numéro de semaine de l'année (00-53), lundi est le premier jour de la semaine
  • %x Représentation locale appropriée de la date
  • %X Représentation locale appropriée de l'heure
  • %Z Nom du fuseau horaire actuel
  • %% Le signe pour cent 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 l'impression du calendrier d'un mois :

Exemples

#!/usr/bin/python3

import calendar

cal = calendar.month(2016, 1)
print ("Ce qui suit affiche le calendrier de 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 descriptionExemples
1time.altzone
Renvoie le décalage en secondes pour les zones d'heure d'été à l'ouest de Greenwich. Si la région est à l'est de Greenwich, une valeur négative est renvoyée (par ex., l'Europe de l'Ouest, y compris le Royaume-Uni). Elle n'est disponible que dans les régions où l'heure d'été est activée.

L'exemple suivant montre l'utilisation de la fonction altzone() :

>>> import time
>>> print ("time.altzone %d " % time.altzone)
time.altzone -28800 
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" (mardi 11 décembre 2008, 18:07:14).

L'exemple suivant montre l'utilisation de la fonction asctime() :

>>> import time
>>> t = time.localtime()
>>> print ("time.asctime(t): %s " % time.asctime(t))
time.asctime(t): Thu Apr  7 10:36:20 2016 
3time.clock()
Renvoie le temps CPU actuel en secondes à virgule flottante. Il est utilisé pour mesurer le temps consommé par différents programmes et est plus utile que time.time().

Exemples

Comme cette méthode dépend du système d'exploitation, elle n'est pas recommandée à partir de Python 3.3 et a été supprimée dans la version 3.8 ; les deux fonctions suivantes doivent être utilisées à la place.

time.perf_counter()  # 返回系统运行时间
time.process_time()  # 返回进程运行时间
4time.ctime([secs])
Son effet est équivalent à asctime(localtime(secs)) ; si aucun argument n'est fourni, il est équivalent à asctime().

L'exemple suivant montre l'utilisation de la fonction ctime() :

>>> import time
>>> print ("time.ctime() : %s" % time.ctime())
time.ctime() : Thu Apr  7 10:51:58 2016
5time.gmtime([secs])
Reçoit un horodatage (secondes à virgule flottante écoulées depuis l'époque 1970) et renvoie le tuple de temps t en temps moyen de Greenwich. Remarque : t.tm_isdst vaut toujours 0.

L'exemple suivant montre l'utilisation de la fonction gmtime() :

>>> import time
>>> print ("gmtime :", time.gmtime(1455508609.34375))
gmtime : time.struct_time(tm_year=2016, tm_mon=2, tm_mday=15, tm_hour=3, tm_min=56, tm_sec=49, tm_wday=0, tm_yday=46, tm_isdst=0)
6time.localtime([secs]
Reçoit un horodatage (secondes à virgule flottante écoulées depuis l'époque 1970) et renvoie le tuple de temps t en heure locale (t.tm_isdst peut valoir 0 ou 1, selon que l'heure d'été est en vigueur ou non à ce moment-là dans la zone locale).

L'exemple suivant montre l'utilisation de la fonction localtime() :

>>> import time
>>> print ("localtime(): ", time.localtime(1455508609.34375))
localtime():  time.struct_time(tm_year=2016, tm_mon=2, tm_mday=15, tm_hour=11, tm_min=56, tm_sec=49, tm_wday=0, tm_yday=46, tm_isdst=0)
7time.mktime(tupletime)
Accepte un tuple de temps et renvoie un horodatage (secondes à virgule flottante écoulées depuis l'époque 1970).
Exemples
8time.sleep(secs)
Retarde l'exécution du thread appelant, où secs désigne des secondes.

L'exemple suivant démontre l'utilisation de la fonction sleep() :

#!/usr/bin/python3
import time

print ("Start : %s" % time.ctime())
time.sleep( 5 )
print ("End : %s" % time.ctime())
9time.strftime(fmt[,tupletime])
Reçoit un tuple temporel et renvoie l'heure locale représentée sous forme de chaîne lisible, avec le format déterminé par fmt.

L'exemple suivant illustre l'utilisation de la fonction strftime() :

>>> import time
>>> print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
2016-04-07 11:18:05
10time.strptime(str,fmt='%a %b %d %H:%M:%S %Y')
Analyse une chaîne de temps en un tuple temporel selon le format de fmt.

L'exemple suivant démontre l'utilisation de la fonction strptime() :

>>> import time
>>> struct_time = time.strptime("30 Nov 00", "%d %b %y")
>>> print ("返回元组: ", struct_time)
返回元组:  time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
11time.time( )
Renvoie l'horodatage de l'heure actuelle (secondes à virgule flottante écoulées depuis l'époque 1970).

L'exemple suivant illustre l'utilisation de la fonction time() :

>>> import time
>>> print(time.time())
1459999336.1963577
12time.tzset()
Réinitialise les paramètres liés au temps conformément à la variable d'environnement TZ.
Exemples
13 time.perf_counter()
Renvoie le temps précis du minuteur (temps de fonctionnement du système), y compris le temps de sommeil de l'ensemble du système. Comme le point de référence de la valeur de retour n'est pas défini, seule la différence entre les résultats d'appels consécutifs est valide.
Exemples
14 time.process_time()
Renvoie le temps CPU total exécuté par le processus actuel, sans inclure le temps de sommeil. Comme le point de référence de la valeur de retour n'est pas défini, seule la différence entre les résultats d'appels consécutifs est valide.
 

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 (lorsque l'heure d'été n'est pas en vigueur) par rapport à Greenwich (>0, Amériques ; <=0 la majeure partie de l'Europe, l'Asie, l'Afrique).
2time.tzname
L'attribut time.tzname contient une paire de chaînes qui varient selon la situation : le nom du fuseau horaire local avec l'heure d'été, et celui sans.


Module Calendar

Les fonctions de ce module sont toutes liées au calendrier, comme l'impression d'un calendrier de caractères pour 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, appelez la fonction calendar.setfirstweekday(). Le module inclut les fonctions intégrées suivantes :

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

Renvoie True s'il s'agit d'une année bissextile, sinon 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 deux années Y1 et Y2.
5calendar.month(year,month,w=2,l=1)
Renvoie un calendrier au format chaîne multiligne pour le mois month de l'année year, avec deux lignes d'en-tête, une semaine par ligne. La largeur quotidienne est de w caractères. La longueur de chaque ligne est 7*w+6. l est le nombre de lignes par semaine.
6calendar.monthcalendar(year,month)
Renvoie une liste imbriquée d'un seul niveau d'entiers. Chaque sous-liste contient des entiers représentant une semaine. Les dates en dehors du mois month de l'année year sont mises à 0 ; les dates comprises dans la plage sont représentées par le jour du mois, à partir de 1.
7calendar.monthrange(year,month)

Renvoie deux entiers. Le premier est le jour de la semaine du mois, et le second est le nombre de jours dans le mois. Les jours de la semaine vont de 0 (lundi) à 6 (dimanche).

>>> import calendar
>>> calendar.monthrange(2014, 11)
(5, 30)

(5, 30) Explication : 5 signifie que le premier jour de novembre 2014 est un samedi, et 30 signifie que novembre 2014 compte au total 30 jours.

8calendar.prcal(year, w=0, l=0, c=6, m=3)
Équivalent à print (calendar.calendar(year, w=0, l=0, c=6, m=3)).
9calendar.prmonth(theyear, themonth, w=0, l=0)
Équivalent àprint(calendar.month(theyear, themonth, w=0, l=0))。
10calendar.setfirstweekday(weekday)
Définit le code du jour de début de 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 depuis l'époque 1970).
12calendar.weekday(year,month,day)
Renvoie le code du jour de la semaine pour la date donnée. De 0 (lundi) à 6 (dimanche). Le mois va 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