python字符串到日期函数。我需要根据今天将正确的年份添加到结果中';s字符串中的日期和月份

python字符串到日期函数。我需要根据今天将正确的年份添加到结果中';s字符串中的日期和月份,python,datetime,scrapy,Python,Datetime,Scrapy,我使用scrapy和python从网页上收集旅游日期 字段中不存在年份,例如“11月11日”或“1月21日”,这很好,因为我可以添加一个年份,使用以下代码进行字符串到日期的转换: def sortdate(self, mydate): newdate = datetime.strptime( re.sub(r"\b([0123]?[0-9])(st|th|nd|rd)\b", r"\1", mydate) + " " + str(datetime.now().year

我使用scrapy和python从网页上收集旅游日期

字段中不存在年份,例如“11月11日”或“1月21日”,这很好,因为我可以添加一个年份,使用以下代码进行字符串到日期的转换:

def sortdate(self, mydate):  
    newdate = datetime.strptime(
        re.sub(r"\b([0123]?[0-9])(st|th|nd|rd)\b", r"\1", mydate) + " " + str(datetime.now().year),
        "%d %B %Y")
    return newdate
这将“11月11日”转换为“datetime.datetime(2019,11,11,0,0)” 这是完美的


我现在的问题是,它给一切都增加了2019年,甚至是明年的日期。因此,我需要评估今天的日期(今天是2019年11月13日),然后当它进行对话时,它将添加正确的年份。e、 g.“1月11日”将获得2020年,但“11月12日”现在也将获得2020年(因为今天的日期已超过阈值)。

您请求帮助修改日期输出,具体取决于输入日期是否已出现在今年的日历上。为了做到这一点,我将您的大部分逻辑(做得很好,顺便说一句)放入一个我们可以使用两次的函数中

我们将对当前年份运行一次,并将输出与
datetime.now()
进行比较,如果日期小于
now()
,则它是过去的。在这种情况下,我们将再次运行相同的逻辑,但今年是+1

import re
from datetime import datetime

def set_date(date, year):
    regex_date = re.sub( r"\b([0123]?[0-9])(st|th|nd|rd)\b", r"\1", date)
    new_date = datetime.strptime(f"{regex_date} {year}", "%d %B %Y")
    return new_date

def sort_date(date):
    now = datetime.now()
    new_date = set_date(date, now.year)
    if new_date < now:
        new_date = set_date(date, now.year + 1)
    return new_date

this_year = sort_date("20 November")
next_year = sort_date("1 November")

print(this_year)
print(next_year)

我正在试图理解这是如何工作的,您能解释一下这段代码的作用吗:datetime.strtime(f“{regex_date}{year},“%d%B%Y”)这是python 3用于字符串连接的优化工具。它的功能与编写
regex\u date+“”+year
相同。你可以用任何你喜欢的方式把线粘在一起,所以你不需要用这个。然而,如果你想了解它。
2019-11-20 00:00:00
2020-11-01 00:00:00