Вопрос

У меня плохое время с анализом и форматированием даты.

Очки для кого-то, кто может разбирать этот формат даты в 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 :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top