"Будущий" год по умолчанию при преобразовании даты с помощью dateutil
Следующие шаблоны даты
1st January
30th April
легко разбираются на случаи datetime.date
с помощью dateutil.parser.parse()
:
In [1]:from dateutil.parser import parse
In [2]: parse('1st January')
Out[2]: datetime.datetime(2012, 1, 1, 0, 0)
In [3]: parse('8th April')
Out[3]: datetime.datetime(2012, 4, 30, 0, 0)
Как можно вернуть будущую дату из разбора?
Т.е. разбор '1st January'
вернется datetime.datetime(2013, 1, 1, 0, 0)
1 января 2013 года, а не 1 января 2012 года. Любое элегантное решение?
1 ответ
Решение
Начиная с отличного ответа mensi на ваш предыдущий вопрос, вот решение, которое принимает даты без определенного года и гарантирует, что они не в прошлом. Если год указан как часть строки, он сохраняется без изменений.
import datetime
import dateutil
def parse(date_string):
result = dateutil.parser.parse(date_string, default=datetime.datetime(1581, 1, 1))
if result.year == 1581:
now = datetime.datetime.now()
result = result.replace(year=now.year)
if result < now:
result = result.replace(year=now.year + 1)
return result
parse('8th April')