Разбор этой даты в Python: 5 ноября 2010 г.
-
27-09-2019 - |
Вопрос
У меня плохое время с анализом и форматированием даты.
Очки для кого-то, кто может разбирать этот формат даты в datetime.date
или datetime.datetime
(Я не слишком суетливый, но я бы предпочел .date
):
5th November 2010
Решение
С использованием 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)
Другие советы
К сожалению, strptime
Не имеет формата символов для «пропустить порядковый суффикс» - так, что я сделаю сначала пропуски с небольшим Re, а затем анализируя полученную «четкую» строку. IE:
>>> 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)
Ваше предпочтение для date
против datetime
не проблема конечно, вот что .date()
метод datetime
Объекты для ;-).
Сторонние расширения, как DateutiL. Может быть полезен, если вам нужно сделать много «нечетких» дата разбора (или другого модуля, связанного с датой вещей ;-), кстати.
Если порядковый срок постоянна, то:
datetime.strptime(s, '%dth %B %Y')
Еще:
date_str = '5th November 2010'
modified_date_str = date_str[0:1] + date_str[3:]
datetime.strptime(modified_date_str, '%d %B %Y')
Или вроде ~ Юнутбу сказал Используйте Dateutil :)