web-dev-qa-db-fra.com

Comment convertir une chaîne Date en un objet DateTime?

J'ai la date suivante:

2005-08-11T16:34:33Z

J'ai besoin de savoir si cette date est antérieure ou postérieure à datetime (2009,04,01) et je n'arrive pas à trouver une méthode qui convertira cette chaîne en quelque chose qui me permette de la comparer à datetime. (2009,04,01) de manière significative.

20
user290043

Comme la chaîne est au format ISO, elle peut être comparée directement avec la version au format ISO de la variable datetime mentionnée:

>>> s='2005-08-11T16:34:33Z'
>>> t=datetime.datetime(2009,04,01)
>>> t.isoformat()
'2009-04-01T00:00:00'
>>> s < t
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't compare datetime.datetime to str
>>> s < t.isoformat()
True
>>> z='2009-10-01T18:20:12'
>>> z < t.isoformat()
False

comme vous le voyez, bien que vous ne puissiez pas comparer chaîne avec des objets datetime, tant que les chaînes sont au format ISO, vous pouvez les comparer avec la fonction .isoformat() des objets datetime. C'est la beauté de la représentation sous forme de chaîne de dates et d'heures au format ISO: elle est correctement comparable et se trie correctement sous forme de chaînes , sans nécessiter nécessairement une conversion en d'autres types.

Si vous souhaitez convertir, vous pouvez bien sûr:

>>> datetime.datetime.strptime(s, '%Y-%m-%dT%H:%M:%SZ')
datetime.datetime(2005, 8, 11, 16, 34, 33)
36
Alex Martelli

Je vous conseillerais de consulter: http://dateutil.readthedocs.io/fr/stable/parser.html

from dateutil.parser import parse datetime = parse("Sat Oct 11 17:13:46 UTC 2003")

1
Lukas N.P. Egger

Si vous connaissez la chaîne, utilisez simplement la fonction datetime.datetime (année, mois, jour, heure, minute, seconde). Fractionnez votre chaîne pour obtenir les variables appropriées et insérez-la pour en faire un type de date/heure. Ensuite, comparez-le avec tout ce dont vous avez besoin.

Ou vous pouvez utiliser le format iso comme les gens l’ont également suggéré.

0
The Jug