0

以下日期模式

1st January
30th April

很容易被解析成datetime.datevia的实例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),2013 年 1 月 1 日而不是 2012 年 1 月 1 日。任何优雅的解决方案?

4

1 回答 1

3

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')
于 2012-04-12T19:08:04.207 回答