Conversion des dates et des heures en chaînes de caractères en Python datetime (strftime, strptime)

Affaires

La bibliothèque standard datetime de Python peut être utilisée pour traiter les dates et les heures (dates, heures et temps). Les méthodes strftime() et strptime(), qui convertissent les dates et les heures en et à partir de chaînes de caractères, peuvent être utilisées pour manipuler les dates et les heures dans une variété de formats.

Il peut également effectuer des opérations telles que la soustraction et l'addition. Par exemple, vous pouvez facilement calculer et obtenir la date d'il y a 10 jours ou de 3 semaines, ou l'heure dans 50 minutes.

Tout d'abord, nous allons décrire les classes d'objets suivantes disponibles dans le module datetime.

  • datetime.datetime:Date et heure (date et heure)
  • datetime.date:Date
  • datetime.time:Temps
  • datetime.timedelta:Différence de temps et temps écoulé

Les méthodes strftime() et strptime(), qui convertissent la date et la chaîne de caractères l'une en l'autre, sont également expliquées.

  • datetimeobjet
    • datetime.now():Date du jour, heure actuelle
    • datetimeConstructeur d'objets
    • Conversion d'un objet datetime en un objet date
  • dateobjet
    • date.today():Date du jour
    • Constructeur pour l'objet date
  • timeobjet
    • Constructeur pour l'objet temps
  • timedeltaobjet
    • Soustrayez les objets datetime et date pour créer des objets timedelta.
    • Constructeur pour l'objet timedelta
    • Soustraction et addition à l'aide d'objets timedelta
  • strftime():Conversion de la date et de l'heure en chaîne de caractères
  • strptime():Conversion d'une chaîne de caractères en date et heure

La bibliothèque standard comprend également le module de calendrier, qui génère des calendriers au format texte brut ou HTML.

objet date-heure

Un objet datetime est un objet qui contient des informations sur la date (année, mois, jour) et l'heure (heure, minute, seconde, microseconde). Vous pouvez accéder à ces informations à l'aide des attributs suivants.

  • year
  • month
  • day
  • hour
  • minute
  • second
  • microsecond

datetime.now(): Date du jour, heure actuelle

datetime.now() vous donnera un objet datetime avec la date du jour (la date actuelle) et l'heure actuelle.

import datetime

dt_now = datetime.datetime.now()
print(dt_now)
# 2018-02-02 18:31:13.271231

print(type(dt_now))
# <class 'datetime.datetime'>

print(dt_now.year)
# 2018

print(dt_now.hour)
# 18

Constructeur pour l'objet datetime

Il est également possible de générer des objets datetime pour des dates et des heures arbitraires.

Le constructeur de l'objet datetime est le suivant.

datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

Les valeurs suivantes sont obligatoires et les autres peuvent être omises. Si elles sont omises, la valeur par défaut est 0.

  • year
  • month
  • day
dt = datetime.datetime(2018, 2, 1, 12, 15, 30, 2000)
print(dt)
# 2018-02-01 12:15:30.002000

print(dt.minute)
# 15

print(dt.microsecond)
# 2000

dt = datetime.datetime(2018, 2, 1)
print(dt)
# 2018-02-01 00:00:00

print(dt.minute)
# 0

Conversion d'un objet datetime en un objet date

Un objet datetime peut être converti en objet date par la méthode date(), comme décrit ci-après.

print(dt_now)
print(type(dt_now))
# 2018-02-02 18:31:13.271231
# <class 'datetime.datetime'>

print(dt_now.date())
print(type(dt_now.date()))
# 2018-02-02
# <class 'datetime.date'>

objet date

Un objet date est un objet qui contient des informations sur une date (année, mois, jour). On peut y accéder par les attributs année, mois et jour.

date.today(): Date du jour

L'objet date de la date actuelle (date du jour) peut être obtenu avec date.today().

d_today = datetime.date.today()
print(d_today)
# 2018-02-02

print(type(d_today))
# <class 'datetime.date'>

print(d_today.year)
# 2018

Constructeur pour l'objet date

Le constructeur de l'objet date est le suivant

date(year, month, day)

Toutes sont obligatoires et ne peuvent être omises.

d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01

print(d.month)
# 2

objet temporel

L'objet temps est un objet qui contient des informations sur le temps (heures, minutes, secondes et microsecondes). On peut y accéder en utilisant les attributs heure, minute, seconde et microseconde.

Constructeur pour l'objet temps

Le constructeur de l'objet temps est le suivant.

time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)

Ils sont tous facultatifs, et s'ils sont omis, ils sont mis à 0.

t = datetime.time(12, 15, 30, 2000)
print(t)
# 12:15:30.002000

print(type(t))
# <class 'datetime.time'>

print(t.hour)
# 12

t = datetime.time()
print(t)
# 00:00:00

objet timedelta

L'objet timedelta est un objet qui représente la différence de temps entre deux dates et heures, ou le temps écoulé. Il contient des informations en jours, secondes et microsecondes, et on peut y accéder par les attributs days, seconds et microseconds. Il est également possible d'obtenir le nombre total de secondes à l'aide de la méthode total_seconds().

Soustraire les objets datetime et date pour créer l'objet timedelta.

En soustrayant les objets datetime les uns des autres, on obtient un objet timedelta.

td = dt_now - dt
print(td)
# 1 day, 18:31:13.271231

print(type(td))
# <class 'datetime.timedelta'>

print(td.days)
# 1

print(td.seconds)
# 66673

print(td.microseconds)
# 271231

print(td.total_seconds())
# 153073.271231

La soustraction des objets date les uns des autres donne de la même manière un objet timedelta.

Constructeur pour l'objet timedelta

Le constructeur de l'objet timedelta est le suivant

timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

Ils sont tous facultatifs, et s'ils sont omis, ils sont mis à 0.

Notez que l'objet timedelta ne contient que les informations suivantes.

  • un certain nombre de jours: days
  • nombre de secondes: seconds
  • comptage des microsecondes: microseconds

Par exemple, les deux suivants sont égaux

  • weeks=1
  • days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00

print(td_1w.days)
# 7

Soustraction et addition à l'aide d'objets timedelta

L'objet timedelta peut être utilisé avec les objets datetime et date pour effectuer des opérations telles que la soustraction et l'addition. Par exemple, vous pouvez facilement calculer et obtenir la date d'il y a une semaine ou dans 10 jours, ou l'heure dans 50 minutes.

d_1w = d_today - td_1w
print(d_1w)
# 2018-01-26

td_10d = datetime.timedelta(days=10)
print(td_10d)
# 10 days, 0:00:00

dt_10d = dt_now + td_10d
print(dt_10d)
# 2018-02-12 18:31:13.271231

td_50m = datetime.timedelta(minutes=50)
print(td_50m)
# 0:50:00

print(td_50m.seconds)
# 3000

dt_50m = dt_now + td_50m
print(dt_50m)
# 2018-02-02 19:21:13.271231

Il peut également être utilisé pour calculer le nombre de jours jusqu'à une date spécifique.

d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00

print(td.days)
# 903

strftime(): Conversion de la date et de l'heure en chaîne de caractères

La méthode strftime() des objets datetime et date peut être utilisée pour convertir les informations relatives à la date et à l'heure (date et heure) en une chaîne de caractères dans un format quelconque.

code de formatage

Voir la documentation officielle ci-dessous pour les codes de formatage disponibles.

Les principaux codes de formatage sont énumérés ci-dessous.

  • %d:Jour du mois en notation décimale avec remplissage par un zéro.
  • %m:Mois en notation décimale avec le zéro rempli.
  • %y:Les deux derniers chiffres de l'année en notation décimale remplie de zéros.
  • %Y:Quatre chiffres de l'année en notation décimale avec un zéro rempli.
  • %H:Lorsqu'il est exprimé en notation décimale avec un zéro rempli (notation en 24 heures)
  • %I:Lorsqu'il est exprimé en notation décimale avec un zéro rempli (notation sur 12 heures)
  • %M:Pour la notation décimale avec le zéro rempli.
  • %S:Secondes en notation décimale avec le zéro rempli.
  • %f:Microsecondes (6 chiffres) en notation décimale avec 0 rempli.
  • %A:Nom du jour de la semaine pour la locale
  • %a:Nom du jour pour la localité (forme abrégée)
  • %B:Nom du mois de la localité
  • %b:Nom du mois de la localité (forme abrégée)
  • %j:Jour de l'année en notation décimale avec remplissage par un zéro.
  • %U:Numéro de semaine de l'année en notation décimale avec remplissage par un zéro (la semaine commence le dimanche).
  • %W:Numéro de semaine de l'année en notation décimale avec remplissage par un zéro (la semaine commence le lundi).

Les codes de formatage suivants pour les noms de jour et de mois peuvent être obtenus dans différentes chaînes de caractères selon la locale.

  • %A
  • %a
  • %B
  • %b

Il existe également une méthode dédiée aux chaînes de caractères au format ISO 8601.

Exemple de code

print(dt_now.strftime('%Y-%m-%d %H:%M:%S'))
# 2018-02-02 18:31:13

print(d_today.strftime('%y%m%d'))
# 180202

print(d_today.strftime('%A, %B %d, %Y'))
# Friday, February 02, 2018

print('Day number (how many days in a year / January 1 is 001):', d_today.strftime('%j'))
print('Week number (the week starts on Sunday / New Year's Day is 00):', d_today.strftime('%U'))
print('Week number (the week begins on Monday / New Year's Day is 00):', d_today.strftime('%W'))
# Day number (how many days in a year / January 1 is 001): 033
# Week number (the week starts on Sunday / New Year's Day is 00): 04
# Week number (the week begins on Monday / New Year's Day is 00): 05

Si vous voulez obtenir un nombre au lieu d'une chaîne, il suffit de la convertir en un nombre entier avec int().

week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>

En combinaison avec l'objet timedelta, il est facile de créer, par exemple, une liste de dates bihebdomadaires dans n'importe quel format.

d = datetime.date(2018, 2, 1)
td = datetime.timedelta(weeks=2)
n = 8
f = '%Y-%m-%d'

l = []

for i in range(n):
    l.append((d + i * td).strftime(f))

print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']

print('\n'.join(l))
# 2018-02-01
# 2018-02-15
# 2018-03-01
# 2018-03-15
# 2018-03-29
# 2018-04-12
# 2018-04-26
# 2018-05-10

L'utilisation de la notation de compréhension de liste est plus intelligente.

l = [(d + i * td).strftime(f) for i in range(n)]
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']

strptime(): Conversion d'une chaîne de caractères en date et heure

datetime strptime() peut être utilisé pour créer un objet datetime à partir d'une chaîne de date ou d'heure. Il est nécessaire de spécifier la chaîne de formatage correspondant à la chaîne d'origine.

Il existe également une méthode dédiée aux chaînes de caractères ISO 8601 (Python 3.7 ou plus).

Exemple de code

date_str = '2018-2-1 12:30'
date_dt = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M')
print(date_dt)
# 2018-02-01 12:30:00

print(type(date_dt))
# <class 'datetime.datetime'>

En utilisant la méthode strftime() sur l'objet datetime récupéré, vous pouvez représenter la date et l'heure dans un format différent de celui de la chaîne originale.

print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30

Si vous le convertissez en un objet datetime, vous pouvez également effectuer des opérations avec des objets timedelta, de sorte que, par exemple, vous pouvez générer une chaîne de caractères d'une date datant de 10 jours dans le même format.

date_str = '2018-2-1'
date_format = '%Y-%m-%d'
td_10_d = datetime.timedelta(days=10)

date_dt = datetime.datetime.strptime(date_str, date_format)
date_dt_new = date_dt - td_10_d
date_str_new = date_dt_new.strftime(date_format)

print(date_str_new)
# 2018-01-22