Exclua esta data em Python: 5 de novembro de 2010
-
27-09-2019 - |
Pergunta
Estou tendo um tempo ruim com a análise da data e formatação hoje.
Pontos para alguém que pode analisar este formato de data em um datetime.date
ou datetime.datetime
(Eu não sou muito exigente, mas eu prefiro .date
):
5th November 2010
Solução
Usando 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)
Outras dicas
Infelizmente, strptime
Não possui caracteres de formato para "pular um sufixo ordinal" - então, eu faria o pular primeiro, com um pouco de ER e depois analisar a string "clara" resultante. Ou seja:
>>> 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)
Sua preferência por date
vs. datetime
não há problema, é claro, é isso que .date()
método de datetime
Objetos é para ;-).
Extensões de terceiros como DateUtil Pode ser útil se você precisar fazer muitas datas "confusas" (ou outras coisas sofisticadas relacionadas a data ;-), a propósito.
Se o ordinal for constante, então:
datetime.strptime(s, '%dth %B %Y')
Senão:
date_str = '5th November 2010'
modified_date_str = date_str[0:1] + date_str[3:]
datetime.strptime(modified_date_str, '%d %B %Y')
Ou como ~ Unutbu disse Use DateUtil :)