J'utilise dateutil.parser.parse
pour formater une date à partir d'une chaîne. Mais maintenant, il confond le mois et le jour.
J'ai une chaîne qui contient 05.01.2015
. Après
dateutil.parser.parse("05.01.2015")
il renvoie:
datetime.datetime(2015, 5, 1, 0, 0)
J'espérais que ça reviendrait (2015, 1, 5, 0, 0)
Comment puis-je dire au code que le format est dd.mm.yyyy
?
Pour mémoire, 25.01.2015
sera analysé comme (2015, 1, 25, 0, 0)
, comme prévu.
Spécifiez dayfirst=True
:
>>> dateutil.parser.parse("05.01.2015", dayfirst=True)
datetime.datetime(2015, 1, 5, 0, 0)
Cela donne la priorité au format JJ-MM-AAAA au lieu de MM-JJ-AAAA dans les cas où le format de la date est ambigu (par exemple lorsque le jour est 12 ou moins). La fonction est documentée ici .
Vous avez demandé: "Comment puis-je dire au code que le format est jj.mm.aaaa?"
Puisque vous avez déjà importé dateutil
alors la plupart réponse directe pourrait être de spécifier le format de la chaîne de date mais c'est un code assez laid:
>>> dateutil.parser.datetime.datetime.strptime(date_string, '%d.%m.%Y')
datetime.datetime(2015, 1, 5, 0, 0)
Nous pouvons voir une alternative évidente intégrée dans le code. Vous pouvez l'utiliser directement.
>>> from datetime import datetime
>>> datetime.strptime(date_string, '%d.%m.%Y')
datetime.datetime(2015, 1, 5, 0, 0)
Il existe également de nouvelles bibliothèques alternatives qui offrent de nombreuses méthodes et propriétés.
Le plus simple à utiliser dans ce cas serait arrow
:
>>> import arrow
>>> arrow.get(date_string, 'DD.MM.YYYY')
<Arrow [2015-01-05T00:00:00+00:00]>
Bien que je trouve le formatage pour flèche plus facile à retenir, pendule utilise l'ancien système de formatage de Python qui pourrait vous éviter d'avoir à apprendre les flèches.
>>> import pendulum
>>> pendulum.datetime.strptime(date_string, '%d.%m.%Y')
<Pendulum [2015-01-05T00:00:00+00:00]>