Задать вопрос

Наилучший способ обработать дату без внешних библиотек?

Есть список дат трёх типов:

9 июля 11:41
Вчера 23:13
Сегодня 09:43

Каков наиболее адекватный способ привести их к единому формату типа '07/08/2015 16:57:00'?

Мои идеи:
1) locale.setlocale(locale.LC_ALL, 'Russian_Russia.1251')
2) datetime.datetime.strptime('14 августа 13:22', "%d %B %H:%M" ) - заставить работать не удалось
3) Можно ли адекватно обработать 'Вчера/Сегодня' без использования парсинга, извращений с datetime.date.today() и timedelta?
4) Вот такие извращения лезут в голову:
def parse_date(text):
    return re.match(u'(?:(?P<yesterday>Вчера)|(?P<today>Сегодня)|(?P<day>\d{1,2})[ ](?P<month>[а-я]+))[ ](?P<time>\d{2}:\d{2})', text, flags=re.U)
  • Вопрос задан
  • 352 просмотра
Подписаться 3 Оценить 2 комментария
Решение пользователя Roman K К ответам на вопрос (2)
@deliro
Наговнокодил тут для тебя :)
from datetime import date, datetime, timedelta

month_list = [None, 'янв', 'фев', 'мар', 'апр', 'мая', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек']

def get_month(s):
    for month in month_list[1:]:
        if month in s:
            return month_list.index(month)
    raise ValueError('Wrong month name %s' % s)

def parse_date(text):
    parts = text.lower().split()
    hours, mins = map(int, parts[-1].split(':'))
    if parts[0] in ('сегодня', 'вчера'):
        d = date.today() if parts[0] == 'сегодня' else date.today() - timedelta(1)
        return datetime(*d.timetuple()[:3] + (hours, mins))
    else:
        day, month, year = int(parts[0]), get_month(parts[1]), date.today().year
        return datetime(year, month, day, hours, mins)
Ответ написан