2015-01-06 17 views
13

Sto usando dateutil.parser.parse per formattare una data da una stringa. Ma ora mescola il mese e il giorno.Python dateutil.parser.parse analizza il mese prima, non il giorno

Ho una stringa che contiene 05.01.2015. Dopo

dateutil.parser.parse("05.01.2015") 

restituisce:

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

speravo il che sarebbe tornato (2015, 1, 5, 0, 0)

Come posso dire il codice che il formato è dd.mm.yyyy?

Per la registrazione, 25.01.2015 verrà analizzato come (2015, 1, 25, 0, 0), come previsto.

risposta

23

Specificare dayfirst=True:

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

Questo dà la precedenza al formato GG-MM-AAAA invece di MM-GG-AAAA nei casi in cui il formato della data è ambiguo (ad esempio, quando il giorno è di 12 o inferiore) . La funzione è documentata here.

+0

Tnx, questo ha fatto il lavoro! Ho cercato nella documentazione a cui ti riferivi, ma non ho trovato nulla. Ma ora funziona bene! (Ho creato questo codice dopo il 12-12-2014, quindi tutto è andato automaticamente bene.) – Timo002

+0

Nessun problema - contento che sia stato d'aiuto. –

1

Hai chiesto, 'Come posso dire al codice che il formato è gg.mm.aaaa?'

Dal momento che avete già importato dateutil allora la maggior parte diretta risposta potrebbe essere quella di specificare il formato della stringa data, ma questo è abbastanza brutto codice:

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

possiamo vedere un ovvio alternativa incorporato nel codice . Potresti usarlo direttamente

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

ci sono anche alcune librerie alternative più recenti che offrono metodi e proprietà in abbondanza.

più semplice da utilizzare in questo caso sarebbe arrow:

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

Anche se trovo la formattazione per arrow più facile da ricordare, pendulum utilizza vecchio sistema di formattazione di Python che potrebbe risparmiare dover imparare freccia di.

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