Recherche de site Web

Comment convertir une chaîne en un 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'applications DigitalOcean. Laissez DigitalOcean se concentrer sur la scalabilité de votre application.

Convertir une chaîne en un 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() retourne un objet datetime qui correspond à la date_string analysée par le format. Les deux arguments sont obligatoires et doivent être des chaînes.

Pour plus de détails sur les directives de format utilisées dans datetime.strptime(), consultez les codes de format strftime() et strptime() dans la documentation Python.

Exemple de conversion de chaîne en objet datetime.datetime()

L'exemple suivant convertit une chaîne de date et d'heure en un objet datetime.datetime(), et imprime le nom de la classe et 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)  # printed in default format

La sortie est :

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

Exemple de conversion de chaîne en objet datetime.date()

L'exemple suivant convertit une chaîne de date en un objet datetime.date(), et imprime le type de classe et 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)  # printed in default format

La sortie est :

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

Exemple de conversion de chaîne en objet datetime.time()

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 un exemple de locale

L'exemple suivant convertit une chaîne de date en locale allemande 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'  # de_DE locale
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

Notez que l'objet résultant n'inclut pas le nom du jour de la semaine à partir de la chaîne d'entrée car un objet datetime.datetime() inclut le jour de la semaine uniquement sous forme de nombre décimal.

Convertir une chaîne en un objet struct_time() en utilisant time.strptime()

La syntaxe de 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 time_string analysée par le format. La time_string est requise et les deux arguments doivent être des chaînes. Si 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(). 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 le format fourni en exemple.

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 indiqué dans la sortie, lorsque vous convertissez une chaîne en un objet time.struct_time(), la méthode strptime() utilise des valeurs de remplacement pour les directives de format qui ne sont pas définies dans l'argument format.

Convertir une chaîne en objet struct_time() en utilisant l'exemple de format par défaut

Si vous ne fournissez pas d'argument format lorsque vous convertissez une chaîne de temps en un objet time.struct_time(), alors 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 de :

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

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

import time

default format - "%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)

La sortie 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 indiqué dans la sortie, lorsque vous convertissez une chaîne en un objet time.struct_time(), la méthode strptime() utilise des valeurs par défaut pour tout indicatif de format qui n'est pas défini dans l'argument format ou par le format par défaut si aucun format n'est fourni.

Dépannage des erreurs strptime()

Si la chaîne d'entrée ne peut pas être analysée par strptime() en utilisant le format fourni, 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 ValueError que vous obtenez lorsque vous utilisez la méthode strptime() expliquent clairement les causes des erreurs d'analyse. L'exemple suivant démontre quelques erreurs courantes, telles que des données supplémentaires et un non-respect du 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. Continuez votre apprentissage avec d'autres tutoriels Python.