Domanda

Sto avendo un brutto momento con la data di oggi l'analisi e la formattazione.

Punti per qualcuno che può analizzare questo formato della data in un datetime.date o datetime.datetime (Io non sono troppo esigente ma io preferirei .date):

5th November 2010

È stato utile?

Soluzione

Uso 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)

Altri suggerimenti

Purtroppo, strptime non ha caratteri di formattazione per "saltare un suffisso ordinale" - così, farei il salto prima, con un po 'RE, e quindi analizzare la stringa risultante "chiaro". Cioè:.

>>> 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)

La preferenza per date vs datetime non è un problema, naturalmente, è quello che il metodo di .date() datetime oggetti è per; -).

estensioni di terze parti come dateutil può essere utile se avete bisogno di fare un sacco di "fuzzy" data l'analisi (o altre cose di fantasia data-correlato ;-), tra l'altro.

Se il numero ordinale è costante, allora:

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')

~ unutbu detto utilizzare dateutil :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top