python string-to-date函数。我需要根据字符串中的今天日期和月份添加正确的年份

我使用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日),然后在进行对话时将添加正确的年份。例如“ 1月11日”将是2020年,但“ 11月12日”现在也将是2020年(因为今天的日期已超过阈值)。

fd1803 回答:python string-to-date函数。我需要根据字符串中的今天日期和月份添加正确的年份

您寻求帮助,以根据输入的日期是否已经在今年的日历上修改日期输出。为了做到这一点,我将您的大部分逻辑(在这方面做得很好)放到了我们可以使用两次的函数中。

我们将对当前年份运行一次,并将输出与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)

输出:

2019-11-20 00:00:00
2020-11-01 00:00:00
本文链接:https://www.f2er.com/3113807.html

大家都在问