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)
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)
# -*- coding: utf-8 -*-
import re
from datetime import datetime, timedelta
months = u'января февраля марта апреля мая июня июля августа сентября октября ноября декабря'.split()
regexp = u'(?:(?P<yesterday>Вчера)|(?P<today>Сегодня)|(?P<day>\d{1,2})[ ](?P<month>[а-я]+))[ ](?P<hour>\d{2}):(?P<minute>\d{2})'
def postdate(text, posted=None):
if posted is None:
posted = datetime.now()
match = re.match(regexp, text, flags=re.U)
if match:
if match.group('today'):
pass
elif match.group('yesterday'):
posted -= timedelta(days=1)
else:
posted = posted.replace(
month = months.index(match.group('month')) + 1,
day = int(match.group('day'))
)
posted = posted.replace(
hour = int(match.group('hour')),
minute = int(match.group('minute')),
second = 0
)
return datetime.strftime(posted, "%d/%m/%Y %H:%M:%S")
print postdate(u'9 июля 11:41')
print postdate(u'Вчера 23:13')
print postdate(u'Сегодня 09:43')
09/07/2015 11:41:00
06/08/2015 23:13:00
07/08/2015 09:43:00