Comment convertir une chaîne en objet datetime ou time en Python

Introduction

Les modules datetime et time de Python incluent tous deux une méthode de classe strptime() pour convertir des chaînes en objets.

Dans cet article, vous utiliserez strptime() pour convertir des chaînes en objets datetime et struct_time().

Déployez vos applications Python depuis GitHub en utilisant la plateforme d’application DigitalOcean. Laissez DigitalOcean se charger de mettre à l’échelle votre application.

Conversion d’une chaîne en objet datetime en utilisant datetime.strptime()

La syntaxe de la méthode datetime.strptime() est :

datetime.strptime(date_string, format)

La méthode datetime.strptime() renvoie un objet datetime qui correspond à la chaîne de date analysée par le format. Les deux arguments sont requis et doivent être des chaînes de caractères.

Pour plus de détails sur les directives de format utilisées dans datetime.strptime(), référez-vous aux Codes de format strftime() et strptime() dans la documentation Python.

Convertir une chaîne en objet datetime.datetime() Exemple

L’exemple suivant convertit une chaîne de date et d’heure en un objet datetime.datetime() et affiche le nom de la classe ainsi que la valeur de l’objet résultant:

from datetime import datetime

datetime_str = '09/19/22 13:55:26'

datetime_object = datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S')

print(type(datetime_object))
print(datetime_object)  # imprimé dans le format par défaut

La sortie est:

<class 'datetime.datetime'>
2022-09-19 13:55:26

Convertir une chaîne en objet datetime.date() Exemple

L’exemple suivant convertit une chaîne de date en un objet datetime.date() et affiche le type de classe ainsi que la valeur de l’objet résultant:

from datetime import datetime

date_str = '09-19-2022'

date_object = datetime.strptime(date_str, '%m-%d-%Y').date()
print(type(date_object))
print(date_object)  # imprimé dans le format par défaut

La sortie est:

<class 'datetime.date'>
2022-09-19

Convertir une chaîne en objet datetime.time() Exemple

L’exemple suivant convertit une chaîne de temps en un objet datetime.time(), et imprime le type de classe et la valeur de l’objet résultant:

from datetime import datetime

time_str = '13::55::26'
time_object = datetime.strptime(time_str, '%H::%M::%S').time()
print(type(time_object))
print(time_object)

La sortie est:

<class 'datetime.time'>
13:55:26

Convertir une chaîne en objet datetime.datetime() avec exemple de localisation

L’exemple suivant convertit une chaîne de date en allemand en un objet datetime.datetime(), et imprime le type de classe et la valeur de l’objet résultant:

from datetime import datetime
import locale

locale.setlocale(locale.LC_ALL, 'de_DE')
date_str_de_DE = '16-Dezember-2022 Freitag'  # Locale de de_DE
datetime_object = datetime.strptime(date_str_de_DE, '%d-%B-%Y %A')
print(type(datetime_object))
print(datetime_object)

La sortie est:

<class 'datetime.datetime'>
2022-12-16 00:00:00

Remarquez que l’objet résultant n’inclut pas le nom du jour de la semaine de la chaîne d’entrée car un objet datetime.datetime() inclut le jour de la semaine uniquement en tant que nombre décimal.

Conversion d’une chaîne en objet struct_time() en utilisant time.strptime()

La syntaxe pour la méthode time.strptime() est:

time.strptime(time_string[, format])

La méthode time.strptime() renvoie un objet time.struct_time() qui correspond à la chaîne de temps analysée par le format. La chaîne de temps est requise et les deux arguments doivent être des chaînes de caractères. Si le format n’est pas fourni, la valeur par défaut est :

'%a %b %d %H:%M:%S %Y'

Cela correspond au format renvoyé par la fonction ctime().

Les directives de format sont les mêmes pour time.strptime() et time.strftime(). Pour en savoir plus sur les directives de format pour le module time dans la documentation Python.

Convertir une chaîne en objet struct_time() avec un exemple de format fourni

L’exemple suivant convertit une chaîne de temps en un objet time.struct_time() en fournissant l’argument format, et imprime la valeur de l’objet résultant :

import time

time_str = '11::33::54'
time_obj = time.strptime(time_str, '%H::%M::%S')
print("A time.struct_time object that uses the format provided:")
print(time_obj)

La sortie est :

A time.struct_time object that uses the format provided:
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1,
tm_hour=11, tm_min=33, tm_sec=54, tm_wday=0, tm_yday=1,
tm_isdst=-1)

Comme le montre la sortie, lorsque vous convertissez une chaîne en un objet time.struct_time(), la méthode strptime() utilise des valeurs de substitution pour toutes les directives de format qui ne sont pas définies dans l’argument format.

Convertir une chaîne en objet struct_time() en utilisant le format par défaut

Si vous ne fournissez pas d’argument format lors de la conversion d’une chaîne temporelle en un objet time.struct_time(), le format par défaut est utilisé et une erreur se produit si la chaîne d’entrée ne correspond pas exactement au format par défaut suivant:

 '%a %b %d %H:%M:%S %Y'

L’exemple suivant convertit une chaîne temporelle en un objet time.struct_time() sans fournir d’argument format, et affiche la valeur de l’objet résultant:

import time

# format par défaut - "%a %b %d %H:%M:%S %Y"
time_str_default = 'Mon Dec 12 14:55:02 2022'
time_obj_default = time.strptime(time_str_default)
print("A time.struct_time object that uses the default format:")
print(time_obj_default)

Le résultat est:

A time.struct_time object that uses the default format:
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=12,
tm_hour=14, tm_min=55, tm_sec=2, tm_wday=0, tm_yday=346,
tm_isdst=-1)

Comme le montre la sortie, lors de la conversion d’une chaîne en un objet time.struct_time(), la méthode strptime() utilise des valeurs de substitution pour toutes les directives de format non définies dans l’argument format ou par le format par défaut si aucun argument format n’est fourni.

Résolution des erreurs de strptime()

Si la chaîne d’entrée ne peut pas être analysée par strptime() en utilisant le format fourni, alors une ValueError est levée. Vous pouvez utiliser le bloc try pour tester les erreurs d’analyse, ainsi que le bloc except pour afficher les résultats. Les messages d’erreur ValueError que vous obtenez lorsque vous utilisez la méthode strptime() expliquent clairement les causes des erreurs d’analyse. L’exemple suivant illustre quelques erreurs courantes, telles que des données supplémentaires et une incompatibilité de format :

from datetime import datetime
import time

datetime_str = '09/19/18 13:55:26'

try:
    datetime_object = datetime.strptime(datetime_str, '%m/%d/%y')
except ValueError as ve1:
    print('ValueError 1:', ve1)

time_str = '99::55::26'

try:
    time_object = time.strptime(time_str, '%H::%M::%S')
except ValueError as ve2:
    print('ValueError 2:', ve2)

La sortie est :

ValueError 1: unconverted data remains:  13:55:26
ValueError 2: time data '99::55::26' does not match format '%H::%M::%S'

Conclusion

Dans ce tutoriel, vous avez converti des chaînes de date et d’heure en objets datetime et time en utilisant Python. Poursuivez votre apprentissage avec d’autres tutoriels Python.

Source:
https://www.digitalocean.com/community/tutorials/python-string-to-datetime-strptime