以下日期模式
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)
如何从解析中返回 future 日期?
即。解析'1st January'
将在2013年1月1日而不是2012年1月1日返回datetime.datetime(2013, 1, 1, 0, 0)
。任何优雅的解决方案?
答案 0 :(得分:2)
从mensi's excellent answer to your previous question开始,这是一个解决方案,它会在没有指定年份的情况下使用日期并确保它们不在过去。如果年份作为字符串的一部分给出,则保持完整。
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')