Python >> Tutoriel Python >  >> Python

Comment travailler avec la date et l'heure en Python

Travailler avec des données de date et d'heure en Python est une compétence importante. Cet article présentera les modules de date et d'heure Python les plus importants.

Travailler avec des dates et des heures en Python peut présenter des défis uniques. Le nombre de jours dans un mois peut changer, ce qui peut compliquer un calcul apparemment simple du nombre de jours entre deux dates. Les années bissextiles rendent cela plus complexe si vous travaillez avec des données couvrant plusieurs années. Différents fuseaux horaires doivent également être pris en compte si vous souhaitez analyser des données de séries chronologiques de différents états ou pays. Cela signifie que nous ne pouvons pas simplement représenter les dates et les heures par des nombres entiers si nous voulons calculer une différence ou les comparer.

Il existe quelques modules Python pratiques qui fournissent des fonctionnalités pour faciliter la gestion des dates et des heures. Nous avons déjà discuté de quelques excellentes bibliothèques que Python a à offrir ; dans cet article, nous présenterons (avec des exemples) certains des outils les plus utiles pour gérer les dates et les heures.

Si vous débutez avec Python, nous avons beaucoup de matériel pour vous mettre sur pied. Un bon point de départ est notre Python Basics cours. Voici les parties 1, 2 et 3. Tous les cours contiennent des exercices interactifs conçus pour accélérer votre apprentissage.

Le temps Module

Le premier module s'appelle time et est fourni avec l'installation standard de Python. Commençons par obtenir l'heure actuelle :

>>> import time
>>> time_now = time.time()
>>> print(time_now)
... 1653035191.6578639

Essayez ceci par vous-même. La sortie que vous obtenez changera en fonction du moment où vous exécutez cette commande. Cependant, cette commande renvoie un très grand nombre. Il s'agit du temps (en secondes) qui s'est écoulé depuis un temps de référence, ou "époque". Pour la plupart des systèmes, l'époque est le jeudi 1er janvier 1970 à 00:00:00 UTC. Les dates et les heures avant cette époque sont exprimées sous la forme d'un nombre négatif. Avoir le temps affiché en secondes depuis 1970 n'est pas particulièrement utile, il peut donc être affiché sous forme de chaîne pré-formatée :


>>> print(time.ctime(time_now))
... Fri May 20 10:26:31 2022

Ici, nous avons utilisé le ctime() méthode pour convertir les secondes écoulées dans un format plus familier.

Le time() La fonction peut être utilisée pour vérifier le temps d'exécution d'un bloc de code, ce qui peut être une information très précieuse lors de l'écriture de programmes plus complexes. Une autre fonction intéressante de ce module est sleep() , qui peut suspendre l'exécution d'un programme pendant un certain nombre de secondes. L'exemple suivant montre ces deux fonctions en action :

>>> t1 = time.time()
>>> for i in range(4):
...     print(i)
...     time.sleep(1)
>>> t2 = time.time()
>>> print('Runtime: %s seconds'%(t2 - t1))
0
1
2
3
Runtime: 4.030589818954468 seconds

Ici, nous chronométrons l'ensemble du for boucle. Dans la boucle, nous imprimons simplement l'index puis dormons pendant 1 seconde. Consultez cet article pour plus d'informations sur la fonction print() de Python. Le temps d'exécution final dépendra du système mais devrait être d'un peu plus de 4 secondes. Ce module a beaucoup plus de fonctionnalités que ce que nous pouvons montrer ici, alors consultez la documentation pour plus de détails.

Le calendrier Module

Le calendar Le module fournit des fonctions liées à la sortie des calendriers. Il est également fourni avec l'installation standard de Python.

Le calendar() fonction imprime simplement le calendrier pour toute l'année. Donnez simplement l'année, sous forme d'entier, comme premier argument. La sortie est une chaîne avec des espaces et des caractères de saut de ligne pour bien afficher le calendrier. De même, le month() La fonction accepte l'année et le mois comme arguments entiers et affiche le calendrier pour ce mois. Vous pouvez lire cet article si vous avez besoin d'aide pour travailler avec des chaînes en Python.

Si vous testez ces fonctions, vous remarquerez que les calendriers utilisent le lundi comme premier jour de la semaine, qui a l'index 0. Vous pouvez obtenir le numéro du jour de la semaine, de 0 à 6, pour n'importe quelle date en utilisant le weekday() fonction. Cette norme de démarrage de la semaine à partir du lundi, à l'index 0, est également utilisée dans d'autres modules Python.

Le Calendar La classe comprend des itérateurs que vous pouvez utiliser pour parcourir les jours de la semaine et les mois de l'année. Il y a aussi un TextCalendar et un HTMLCalendar classe, qui peut générer du texte brut et des calendriers HTML. Encore une fois, consultez la documentation pour plus de détails sur ce module.

La date/heure Module

Avec l'aide du datetime module, vous pouvez définir des dates et des heures en tant qu'objet. Comme indiqué dans la documentation, l'accent de ce module est sur l'extraction d'attributs efficace pour afficher et manipuler datetime objets. Mais ce n'est pas limité à cela; vous pouvez également l'utiliser pour calculer le nombre de jours entre deux dates. Pour définir un objet datetime, importez le module et procédez comme suit :

>>> import datetime
>>> date1 = datetime.datetime(2022, 1, 1, 12, 30, 0)

Les arguments définissent la date depuis l'année jusqu'à la microseconde, avec le year , month , et day étant des arguments requis. Vous pouvez également éventuellement inclure des informations de fuseau horaire lors de la définition du datetime objet. Si vous essayez de définir une date invalide, par exemple avec l'argument day = 35 , vous obtiendrez ValueError: day is out of range for month .

Le datetime objet a de nombreuses méthodes qui lui sont associées. Vous pouvez récupérer l'année avec date1.year , qui renvoie un entier. Cela fonctionne également pour les autres informations de date et d'heure jusqu'à la microseconde. Comme nous en avons discuté précédemment, le jour de la semaine (sous forme d'entier compris entre 0 et 6) peut être récupéré à l'aide du weekday() fonction :

	>>> print(date1.weekday())
	... 5

L'entier 5 correspond à un samedi. Vous pouvez vérifier cela en imprimant le calendrier en utilisant le calendar module. Essayez-le vous-même.

Créons un autre datetime objet :

	>>> date2 = datetime.datetime(2021, 7, 31)

La différence entre les deux dates peut être facilement calculée et imprimée :

>>> time_diff = date1 - date2
>>> print('Number of days between %s and %s = %s'%(date1, date2, time_diff.days))

Number of days between 2022-01-01 12:30:00 and 2021-07-31 00:00:00 = 154

Cela crée un nouveau timedelta objet, qui représente une durée. Nous avons utilisé le days() méthode pour obtenir le décalage horaire en jours, puis imprimé la réponse. Même si le décalage horaire s'étend sur plusieurs années, la résolution la plus grossière du timedelta l'objet sera en jours.

Dans l'exemple ci-dessus, nous avons simplement affiché l'objet en utilisant le print() fonction. Le format par défaut lorsque l'objet est imprimé de cette manière est AAAA-MM-JJ HH:MM:SS. Le datetime module est livré avec des fonctionnalités pratiques pour aider à formater et afficher des objets. Par exemple, strftime() est une méthode d'instance qui vous permet de créer une représentation sous forme de chaîne d'un datetime objet. Voici quelques exemples d'utilisation de différentes chaînes de format pour imprimer des informations de date et d'heure à l'aide de cette méthode :

>>> print(date1.strftime('%Y %m %d'))
... 2022 01 01

>>> print(date1.strftime('%Y-%m-%d'))
... 2022-01-01

>>> print(date1.strftime('%A %d %B %Y'))
... Saturday 01 January 2022

>>> print(date1.strftime('%a %d %b %y, %H:%M:%S %p'))
... Sat 01 Jan 22, 12:30:00 PM

Il existe de nombreuses autres options pour formater une chaîne de sortie date/heure. Jetez un œil aux codes de format pour vous inspirer.

Liée à ceci est la méthode de classe strptime() . Il fait l'inverse de l'exemple précédent, à savoir passer d'une chaîne à un datetime objet. Cette méthode a deux arguments obligatoires :une chaîne de date et une chaîne de format. Vous utilisez les mêmes codes de format que ceux mentionnés ci-dessus. Voici un exemple :

>>> date3 = datetime.datetime.strptime('2022-01-01', '%Y-%m-%d')
>>> print(date3)
2022-01-01 00:00:00

Travailler dans différents fuseaux horaires

La dernière fonctionnalité que nous allons démontrer est de savoir comment gérer les fuseaux horaires. Lorsque vous créez un datetime objet, vous pouvez définir le fuseau horaire à l'aide de la bibliothèque pytz. Pour une liste complète des fuseaux horaires, exécutez simplement pytz.common_timezones dans le terminal, qui imprimera une liste de chaînes. Nous pouvons choisir quelques fuseaux horaires et vérifier l'heure actuelle :

>>> import pytz
>>> time_zones = ['America/New_York', 'Asia/Seoul', 'Australia/Melbourne', 'Europe/Zagreb']
>>> for time_zone in time_zones:
... 	print(datetime.datetime.now(tz=pytz.timezone(time_zone)))
2022-05-20 04:26:34.134504-04:00
2022-05-20 17:26:34.134504+09:00
2022-05-20 18:26:34.134504+10:00
2022-05-20 10:26:34.134504+02:00

Ces datetime les objets sont désormais "conscients" et ne peuvent jouer qu'avec d'autres objets sensibles au fuseau horaire. Essayez de calculer la différence de temps entre un objet conscient et un objet naïf et vous obtiendrez un TypeError .

Prenez votre temps et apprenez Python

Travailler avec des dates et des heures est une compétence importante dans de nombreux aspects de la programmation. Il y a bien plus que ce que nous pouvons couvrir dans un seul article. Consultez cet article, où nous abordons de nombreux sujets dont nous avons discuté ici et montrons quelques exemples intéressants. Avec un peu de temps et de pratique, vous maîtriserez une autre compétence Python importante.