Python dateutil.analyseur.analyser analyse le premier mois, pas le jour
j'utilise dateutil.parser.parse
pour formater une date à partir d'une chaîne. Mais maintenant, il mélange le mois et le jour.
j'ai une chaîne qui contient 05.01.2015
. Après
dateutil.parser.parse("05.01.2015")
renvoie:
datetime.datetime(2015, 5, 1, 0, 0)
j'espère que le il serait de retour (2015, 1, 5, 0, 0)
Comment puis-je dire au code que le format est <!--5?
Pour l'enregistrement, 25.01.2015
va être analysée comme (2015, 1, 25, 0, 0)
, comme prévu.
2 réponses
Spécifier dayfirst=True
:
>>> dateutil.parser.parse("05.01.2015", dayfirst=True)
datetime.datetime(2015, 1, 5, 0, 0)
ceci donne la priorité au format JJ-MM-AAAA au lieu de MM-JJ-AAAA dans les cas où le format de date est ambigu (par exemple quand le jour est de 12 ou moins). La fonction est documentée ici.
vous avez demandé, ' Comment puis-je dire au code que le format est dd.mmm.yyyy?'
Puisque vous avez déjà importé dateutil
ensuite, la plupart des direct réponse peut être pour spécifier le format de la chaîne de date, mais c'est assez moche code:
>>> 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 utiliser directement.
>>> from datetime import datetime
>>> datetime.strptime(date_string, '%d.%m.%Y')
datetime.datetime(2015, 1, 5, 0, 0)
il y a aussi quelques nouvelles bibliothèques alternatives qui offrent des méthodes et des propriétés en abondance.
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 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]>