2015-01-06 19 views
13

Ich verwende dateutil.parser.parse, um ein Datum aus einer Zeichenfolge zu formatieren. Aber jetzt vermischt es den Monat und den Tag.Python dateutil.parser.parse analysiert zuerst den Monat, nicht den Tag

Ich habe eine Zeichenfolge, die 05.01.2015 enthält. Nach

dateutil.parser.parse("05.01.2015") 

es zurück:

datetime.datetime(2015, 5, 1, 0, 0) 

hoffte ich, die es (2015, 1, 5, 0, 0)

zurückkehren Wie kann ich den Code sagen, dass das Format dd.mm.yyyy ist?

Für den Datensatz wird 25.01.2015 als (2015, 1, 25, 0, 0) analysiert, wie erwartet.

Antwort

23

Geben dayfirst=True:

>>> dateutil.parser.parse("05.01.2015", dayfirst=True) 
datetime.datetime(2015, 1, 5, 0, 0) 

Dies gibt den Vorrang das DD-MM-YYYY-Format anstelle von MM-DD-YYYY in Fällen, in denen das Datumsformat nicht eindeutig ist (zB wenn der Tag 12 oder niedriger) . Die Funktion ist dokumentiert here.

+0

Tnx, das hat den Job gemacht! Ich habe in die Dokumentation geschaut, auf die Sie sich beziehen, konnte aber nichts finden. Aber jetzt funktioniert es gut! (Ich habe diesen Code nach dem 12.12.2014 erstellt, also ging automatisch alles gut.) – Timo002

+0

Kein Problem - froh, dass es geholfen hat. –

1

Sie haben gefragt: "Wie kann ich dem Code sagen, dass das Format dd.mm.yyyy ist?"

Da Sie bereits dateutil importiert dann die meisten direkte Antwort könnte sein, das Format der Datumszeichenfolge angeben, aber das ist ziemlich hässlich Code:

>>> dateutil.parser.datetime.datetime.strptime(date_string, '%d.%m.%Y') 
datetime.datetime(2015, 1, 5, 0, 0) 

Wir können eine offensichtliche Alternative sehen im Code eingebettet . Sie könnten das direkt verwenden.

>>> from datetime import datetime 
>>> datetime.strptime(date_string, '%d.%m.%Y') 
datetime.datetime(2015, 1, 5, 0, 0) 

Es gibt auch einige neuere alternative Bibliotheken, die Methoden und Eigenschaften in Hülle und Fülle bieten.

>>> import arrow 
>>> arrow.get(date_string, 'DD.MM.YYYY') 
<Arrow [2015-01-05T00:00:00+00:00]> 

Obwohl ich die Formatierung für arrow leichter merken lässt, pendulum verwendet Python alten Formatierungssystem, das Sie Pfeil erlernen könnten sparen mit:

Simplest in diesem Fall arrow wäre zu verwenden.

>>> import pendulum 
>>> pendulum.datetime.strptime(date_string, '%d.%m.%Y') 
<Pendulum [2015-01-05T00:00:00+00:00]>