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



我使用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(因为今天的日期已经超过了阈值(。

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

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

最新更新