使用dateutil进行日期转换时的默认“未来”年份

时间:2012-04-12 19:06:41

标签: python python-datetime python-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)

如何从解析中返回 future 日期?

即。解析'1st January'将在2013年1月1日而不是2012年1月1日返回datetime.datetime(2013, 1, 1, 0, 0)。任何优雅的解决方案?

1 个答案:

答案 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')