Frage

Ich bin eine schlechte Zeit, die mit Datum Parsen und heute formatiert wird.

Punkte für jemanden, der dieses Datum-Format in ein datetime.date oder datetime.datetime analysieren kann (ich bin nicht zu pingelig, aber ich würde es vorziehen, .date):

5th November 2010

War es hilfreich?

Lösung

Verwenden dateutil :

In [2]: import dateutil.parser as dparser

In [3]: date = dparser.parse('5th November 2010')

In [4]: date
Out[4]: datetime.datetime(2010, 11, 5, 0, 0)

Andere Tipps

Leider hat strptime keine Formatierungszeichen für „eine Ordnungs Suffix überspringen“ - so würde ich zuerst das Überspringen tun, mit ein wenig RE, und dann analysieren, um die resultierenden „clear“ String. Das heißt:.

>>> import re
>>> import datetime
>>> ordn = re.compile(r'(?<=\d)(st|nd|rd|th)\b')
>>> def parse(s):
...   cleans = ordn.sub('', s)
...   dt = datetime.datetime.strptime(cleans, '%d %B %Y')
...   return dt.date()
... 
>>> parse('5th November 2010')
datetime.date(2010, 11, 5)

Ihre Präferenz für date vs datetime ist kein Problem, natürlich, das ist, was die .date() Methode der datetime Objekte ist für; -).

Erweiterungen von Drittanbietern wie dateutil kann nützlich sein, wenn Sie eine Menge von „fuzzy“ zu tun Datum Parsing (oder andere ausgefallene datumsbezogene Sachen ;-), nebenbei bemerkt.

Wenn die Ordnungs konstant ist dann:

datetime.strptime(s, '%dth %B %Y')

Else:

date_str = '5th November 2010'
modified_date_str = date_str[0:1] + date_str[3:]
datetime.strptime(modified_date_str, '%d %B %Y')

Oder wie ~ unutbu sagte verwenden dateutil :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top