Python >> Tutoriel Python >  >> Python

Comment travailler avec des objets de date et d'heure Python

À un moment donné de votre parcours Python, vous devrez certainement travailler avec des dates, des heures ou les deux. Apprenez toutes les bases de la date et de l'heure en Python avec ce court tutoriel.

Besoin de calculer combien de temps s'est écoulé depuis une date donnée ? Vous travaillez avec des objets de date et d'heure en Python ? Dans ce guide du débutant, nous verrons comment écrire des programmes avec ces deux types de données clés en Python.

Classes de date/heure Python

Python a cinq classes pour travailler avec des objets date et heure :

  • date – contient uniquement des informations de date (année, mois, jour).
  • temps – fait référence au temps indépendant du jour (heure, minute, seconde, microseconde).
  • dateheure – combine les informations de date et d'heure.
  • timedelta – représente la différence entre deux dates ou heures.
  • tzinfo – une classe abstraite pour manipuler les informations de fuseau horaire.

Ces classes sont fournies dans le datetime module. Vous devrez donc commencer votre travail avec la date et l'heure en important toutes les classes requises, comme ceci :

# Starting with the required imports
from datetime import datetime, date, time, timedelta

Voyons maintenant ce que vous pouvez réellement faire avec ces classes.

Obtenir la date et l'heure actuelles

Tout d'abord, il n'est pas surprenant que Python vous permette d'obtenir la date et l'heure actuelles. Vous pouvez également accéder aux composants séparés de ces objets.

Pour obtenir la date actuelle , vous utiliseriez le today() méthode du date class, c'est-à-dire que vous écririez date.today() .

# Getting current date
today = date.today()
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
print ("Today's date is ", today)
print ("\n", "Year:", today.year,
       "\n", "Month:", today.month, 
       "\n","Day:", today.day, 
       "\n","Weekday:", today.weekday(),
       "\n","Weekday (name):", days[today.weekday()])
Today's date is  2019-02-22

 Year: 2019 
 Month: 2 
 Day: 22 
 Weekday: 4 
 Weekday (name): Friday

Cela renverra uniquement la date d'aujourd'hui sans l'heure exacte. Cependant, la date a un ensemble de composants auxquels vous pouvez accéder individuellement en utilisant les attributs correspondants de l'objet date . Comme vous pouvez le voir dans l'exemple ci-dessus, il est possible d'accéder à l'année , mois , jour , et même jour de la semaine .

Notez que les jours de la semaine sont fournis sous forme d'indices avec 0 correspondant au lundi, 1 au mardi, 2 au mercredi, etc. Ainsi, si vous souhaitez imprimer le nom d'un jour de la semaine, vous avez deux options :

  • Créez une liste de chaînes qui représentent les noms des jours de la semaine ; accéder à ses éléments individuels en utilisant la sortie du date.weekday() méthode comme index.
  • Créez une carte d'index vers leurs noms de chaîne correspondants, puis utilisez l'index renvoyé par date.weekday() comme clé du dictionnaire.

Aucune approche n'est plus efficace que l'autre, alors utilisez celle que vous préférez !

Voyons maintenant comment vous pouvez obtenir l'heure actuelle avec Python, ainsi que d'accéder à ses composants individuels. Utilisation du now() méthode de la classe datetime, vous obtiendrez toutes les informations sur l'heure actuelle, y compris la date. Vous pouvez obtenir des informations uniquement sur l'heure en transmettant la sortie de datetime.now() au datetime.time() méthode. Jetez un oeil à cet exemple :

# Getting current time
time = datetime.now()
print("It's", time, "now.")
print ("\n", "Time:", datetime.time(time),
       "\n", "Hour:", time.hour, 
       "\n","Minute:", time.minute, 
       "\n","Second:", time.second,
       "\n","Microsecond:", time.microsecond)
It's 2019-02-23 13:10:12.387096 now.

 Time: 13:10:12.387096 
 Hour: 13 
 Minute: 10 
 Second: 12 
 Microsecond: 387096

Semblable à la façon dont nous avons manipulé le date objet, vous pouvez accéder aux composants individuels d'un objet temps à l'aide des attributs correspondants. Ainsi, vous pouvez accéder séparément à l'heure actuelle , minute , deuxième , et microseconde .

Création d'objets Datetime

Évidemment, vous pouvez également créer des objets datetime en Python contenant n'importe quelle date et heure plausibles de l'année 1 jusqu'à l'année 9999. Si vous avez besoin d'un objet qui ne contient que la date et aucune information d'heure, passez simplement l'année , mois , et jour au date() fonction.

# Creating date object
einstein_birthday = date(1879, 3, 14)
print ('Einstein\'s birthday is on {}.'.format(einstein_birthday))
Einstein's birthday is on 1879-03-14.

# Creating datetime object
einstein_birthtime = datetime(1879, 3, 14, 8, 34, 55, 2345)
print ('Einstein was born on {}.'.format(einstein_birthtime))
Einstein was born on 1879-03-14 08:34:55.002345.

Si nous imaginons une seconde que l'heure exacte de la naissance d'Einstein soit connue, nous pourrions créer un objet datetime qui contient non seulement la date mais aussi l'heure de l'événement. Pour créer un tel objet, nous passerions les arguments nécessaires au datetime() fonction, c'est-à-dire l'année , mois , jour , heure , minute , deuxième , et microseconde .

Notez que année , mois , et jour sont les seuls arguments requis pour le datetime() fonction; si vous ne fournissez pas les autres arguments, ils seront mis à zéro par défaut.

Formater les dates/heures

Jusqu'à présent, les dates et heures avec lesquelles nous travaillions étaient imprimées au format par défaut "AAAA-MM-JJ HH:MM:SS". Cependant, Python vous offre une plus grande flexibilité dans la façon dont vous formatez les dates et les heures. De plus, vous n'aurez besoin de maîtriser qu'une seule méthode de formatage pour obtenir des dates et des heures dans le format de votre choix :strftime() .

Pour changer le format de votre objet datetime, il vous suffira de passer le format approprié au strftime() méthode. Le format est exprimé à l'aide de directives spéciales telles que :

  • %Y :année avec siècle (par exemple, 2019).
  • %y - année sans siècle (par exemple, 19).
  • %B - mois sous forme de nom complet (par exemple, mars).
  • %b - mois sous forme d'abréviation (par exemple, mars).
  • %m - mois sous forme d'entier complété par des zéros (par exemple, 03).
  • %d – jour du mois sous la forme d'un entier rempli de zéros (par exemple, 25).
  • %A :jour de la semaine sous forme de nom complet (par exemple, lundi).
  • %a - jour de la semaine sous forme d'abréviation (par exemple, lundi).

Voyons comment nous pouvons jouer avec différents formats :

# Formatting a date object
einstein_birthday = datetime(1879, 3, 14)
print ('Einstein was born on {}.'.format(einstein_birthday))
print ('Einstein was born on {}.'.format(einstein_birthday.strftime('%b %d, %Y')))
print ('Einstein was born on {}.'.format(einstein_birthday.strftime('%a, %B %d, %Y')))
print ('Einstein was born on {}.'.format(einstein_birthday.strftime('%A, %B %d, %Y')))
print ('Einstein was born on {}.'.format(einstein_birthday.strftime('%d.%m.%Y')))
print ('Einstein was born on {}.'.format(einstein_birthday.strftime('%d/%m/%y')))
Einstein was born on 1879-03-14 00:00:00.
Einstein was born on Mar 14, 1879.
Einstein was born on Fri, March 14, 1879.
Einstein was born on Friday, March 14, 1879.
Einstein was born on 14.03.1879.
Einstein was born on 14/03/79.

Vous pouvez en fait formater l'heure de la même manière, en gardant à l'esprit que :

  • '%H' représente les heures au format 24 heures.
  • '%I' représente les heures au format 12 heures.
  • '%M' indique les minutes.
  • '%S' désigne les secondes.
  • '%p' indique si l'heure est AM ou PM.
# Formatting a time object
meeting_time = datetime.time(datetime (2019, 3, 25, 20, 30))
print ('Meeting starts at {}.'.format(meeting_time))
print ('Meeting starts at {}.'.format(meeting_time.strftime('%H:%M')))
print ('Meeting starts at {}.'.format(meeting_time.strftime('%I:%M %p')))
Meeting starts at 20:30:00.
Meeting starts at 20:30.
Meeting starts at 08:30 PM.

Convertir des chaînes en objets Datetime

Si les dates ou les heures de votre ensemble de données sont représentées sous forme de chaînes, vous pouvez facilement les convertir en objets datetime en utilisant le strptime() méthode. Il vous suffit de spécifier le format dans lequel vos chaînes représentent des dates ou des heures.

Par exemple, supposons que vous ayez besoin d'extraire des dates d'un corps de texte où ces dates sont représentées par "25 mars 2019". Il vous suffira de passer cette chaîne et le format correspondant au strptime() méthode. Jetez un œil :

# Converting strings to dates
date = datetime.strptime('March 25, 2019', '%B %d, %Y')
print(date)
2019-03-25 00:00:00

Besoin de plus de pratique pour convertir des chaînes en objets datetime en Python ? Consultez notre cours sur l'utilisation des chaînes en Python.

Comparaison d'objets datetime

Imaginons que nous connaissions l'heure de naissance exacte non seulement d'Albert Einstein mais aussi d'Isaac Newton et de Stephen Hawking. Comment comparer les objets date et heure en Python ?

Eh bien, c'est en fait très simple! Vous pouvez comparer date et datetime objets de la même manière que vous compareriez des nombres :avec le supérieur à (> ) et inférieur à (< ) opérateurs.

# Comparing times
einstein_birthtime = datetime(1879, 3, 14, 8, 34, 55, 2345)
newton_birthtime = datetime(1643, 1, 4, 15, 55, 4, 15432)
hawking_birthtime = datetime(1942, 1, 8, 22, 13, 43, 78432)
einstein_birthtime > newton_birthtime
True

hawking_birthtime < einstein_birthtime
False

Obtenir des intervalles de temps

On sait donc qu'Einstein est né après Newton, mais combien de temps après ? Découvrons !

# Calculating the difference between two dates
delta = einstein_birthday - newton_birthday
print (delta)
print ('Einstein was born {} years later than Newton.'.format(round(delta.days/365)))
86266 days, 0:00:00
Einstein was born 236 years later than Newton.

Comme vous pouvez le voir dans l'exemple, vous pouvez calculer la différence entre deux objets de date de la même manière que vous le feriez avec des nombres. Le résultat est exprimé en jours.

Le delta que nous avons calculé ici est a timedelta objet . Il représente la différence entre deux dates ou heures. Cette différence peut être exprimée en jours, secondes, microsecondes, millisecondes, minutes, heures et même semaines. De plus, notez que le résultat peut être positif , négatif , ou zéro .

Pour en revenir à nos physiciens, découvrons combien de jours se sont écoulés entre la mort d'Einstein et la naissance de Hawking :

# Calculating the difference between two dates with a negative result
einstein_death = datetime(1955, 4, 18)
hawking_birthday = datetime(1942, 1, 8)
delta = hawking_birthday - einstein_death
print(delta)
-4848 days, 0:00:00

Nous avons obtenu un résultat négatif car Einstein est mort alors que Hawking avait déjà 13 ans.

Création d'objets timedelta en Python

Dans les exemples précédents, timedelta objets résultant de nos opérations arithmétiques datetime, mais nous pouvons également créer ces objets explicitement et les utiliser pour définir de nouveaux objets date et heure. Par exemple, étant donné une date précise, nous pouvons calculer une nouvelle date en ajoutant ou en soustrayant un certain nombre de jours, d'heures, de semaines, etc.

# Calculating the date 100 days before Einstein's birth
einstein_100days_before = einstein_birthday + timedelta(days=-100)
print ('Einstein was born 100 days after {}.'.format(einstein_100days_before))
Einstein was born 100 days after 1878-12-04 00:00:00.

# Calculating the date 4 weeks after Einstein's birth
einstein_4weeks_after = einstein_birthday + timedelta(weeks=4)
print ('Einstein was 4 weeks old on {}.'.format(einstein_4weeks_after))
Einstein was 4 weeks old on 1879-04-11 00:00:00.

Comme vous pouvez le constater à partir des exemples, lorsque nous passons un nombre négatif comme argument à timedelta() , la durée donnée est soustraite de la date d'origine (par exemple, moins 100 jours). En revanche, lorsque nous passons un nombre positif, nous ajoutons cette durée à notre objet date (par exemple, plus 4 semaines).

Date et heure Python :apprises !

Vous savez maintenant comment créer des objets datetime à partir de zéro ou à partir de chaînes, comment obtenir la date et l'heure actuelles, comment comparer deux dates et comment formater les dates et les heures. Vous connaissez toutes les bases, alors votre prochaine étape est de vous entraîner ! Et pour cela, assurez-vous de consulter notre cours Python Basics Part 3; il contient des tonnes d'exercices interactifs et quelques quiz liés à la date et à l'heure manipulation en Python.

Vous trouverez peut-être également utile de consulter Python Basics Part 1 et Python Basics Part 2 pour rafraîchir vos connaissances sur les instructions conditionnelles , boucles , listes , dictionnaires , et d'autres concepts de programmation Python essentiels.

Si vous souhaitez observer des progrès considérables dans votre carrière, assurez-vous d'investir du temps et des efforts dans le développement professionnel et la formation continue. Vous ne savez jamais lesquelles de ces compétences nouvellement acquises joueront un rôle crucial dans votre prochaine promotion, mais elles le seront certainement toutes !