Comment convertir des chaînes de caractères en dates en Python

Votre application reçoit des données temporelles au format chaîne de carcatères, mais vous voulez convertir ces chaînes en objets datetime afin d’effectuer des opérations de non chaîne de caractères sur celles-ci.

Le module datetime standard de Python est typiquement la solution facile pour cela. Par exemple:

>>> from datetime import datetime
>>> texte = '2018-09-20'
>>> y = datetime.strptime(texte, '%Y-%m-%d')
>>> z = datetime.now()
>>> diff = z - y
>>> diff
datetime.timedelta(3, 77824, 177393)
>>>

La méthode datetime.strptime() supporte une foule de codes de formatage, comme %Y pour l’année à quatre chiffres et %m pour le mois à deux chiffres.

Il est également intéressant de noter que ces caractères génériques de formatage fonctionnent également à l’envers, au cas où vous auriez besoin de représenter un objet datetime en chaîne de caractères et de lui donner un aspect agréable.

Par exemple, disons que vous avez du code qui génère un objet datetime, mais que vous avez besoin de formater une date lisible par l’homme pour la mettre dans l’en-tête d’une lettre ou d’un rapport généré automatiquement:

>>> z
datetime.datetime(2018, 9, 23, 21, 37, 4, 177393)
>>> nice_z = datetime.strftime(z, '%A %B %d, %Y')
>>> nice_z
'Sunday September 23, 2018'
>>>

Il est intéressant de noter que les performances de strptime() sont souvent bien pires que ce à quoi on pourrait s’attendre, du fait qu’il est écrit en Python pur et qu’il doit gérer toutes sortes de paramètres linguistiques du système.

Si vous analysez beaucoup de dates dans votre code et que vous connaissez le format précis, vous obtiendrez probablement de bien meilleures performances en préparant une solution personnalisée.

Par exemple, si vous saviez que les dates étaient de la forme “AAAA-MM-JJ”, vous pourriez écrire une fonction comme celle-ci:

from datetime import datetime
def convertir(s):
    annee, mois, jour= s.split('-')
    return datetime(int(annee), int(mois), int(jour))

Lorsqu’elle est testée, cette fonction s’exécute sept fois plus vite que datetime.strptime(). C’est probablement quelque chose à considérer si vous traitez de grandes quantités de données comportant des dates.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here