Analizar esta fecha en Python: 5 noviembre 2010
-
27-09-2019 - |
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
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 :)