2012-04-12 3 views
0

folgenden Termin MusterDefault "Zukunft" Jahr, als Bewirkung Datumsumstellung mit dateutil

1st January 
30th April 

lassen sich leicht in Instanzen von datetime.date über dateutil.parser.parse() analysiert:

In [1]:from dateutil.parser import parse 

In [2]: parse('1st January') 
Out[2]: datetime.datetime(2012, 1, 1, 0, 0) 

In [3]: parse('8th April') 
Out[3]: datetime.datetime(2012, 4, 30, 0, 0) 

Wie kann eine Zukunft Datum vom Parsen zurückgegeben werden?

I.e. Parsing '1st January' würde datetime.datetime(2013, 1, 1, 0, 0), 1. Januar 2013 und nicht 1. Januar 2012 zurückgeben. Jede elegante Lösung?

Antwort

2

Beginnend mit mensi's excellent answer to your previous question, hier ist eine Lösung, die Daten ohne ein bestimmtes Jahr dauert und stellt sicher, dass sie nicht in der Vergangenheit sind. Wenn das Jahr als Teil der Zeichenfolge angegeben wird, bleibt es intakt.

import datetime 
import dateutil 

def parse(date_string): 
    result = dateutil.parser.parse(date_string, default=datetime.datetime(1581, 1, 1)) 
    if result.year == 1581: 
     now = datetime.datetime.now() 
     result = result.replace(year=now.year) 
     if result < now: 
      result = result.replace(year=now.year + 1) 
    return result 

parse('8th April') 
+0

Danke! Aber gerade jetzt funktioniert es nicht. 'dateutil.parse' funktioniert nicht, also importiere ich' parse' über 'from dateutil.parser importparse' und benenne die Methode' parse' in 'parse_future' um. Einfache Schritte, um es zu starten, aber sobald es ausgeführt wird gibt es 'datetime.datetime (1581, 4, 8, 0, 0)' zurück. –

+0

@JosvicZammit, ich denke, ich habe es behoben. –

+0

Ich bin Debuggen. Das 'result.replace (Jahr = jetzt.Jahr + 1)' ist das Stück, das nicht funktioniert. –

Verwandte Themen