Pregunta

Estoy teniendo un mal momento con la fecha de análisis y formateo de hoy.

Puntos por alguien que pueda analizar este formato de fecha en un datetime.date o datetime.datetime (no soy muy exigente, pero yo preferiría .date):

5th November 2010

¿Fue útil?

Solución

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)

Otros consejos

Por desgracia, strptime no tiene caracteres de formato para "saltar un sufijo ordinal" - así, lo haría saltar la primera, con un poco de RE, y luego analizar la cadena "claro" resultante. Es decir:.

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

Su preferencia por date vs datetime hay ningún problema, por supuesto, eso es lo que el método de .date() datetime objetos es para; -).

Las extensiones de terceros como dateutil puede ser útil si usted tiene que hacer un montón de "fuzzy" fecha de análisis (u otra materia de lujo la fecha relacionada ;-), por cierto.

Si el ordinal es constante, entonces:

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

O como ~ unutbu dijo utilizar dateutil :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top