python字符串到日期函数。我需要根据今天将正确的年份添加到结果中';s字符串中的日期和月份
我使用scrapy和python从网页上收集旅游日期 字段中不存在年份,例如“11月11日”或“1月21日”,这很好,因为我可以添加一个年份,使用以下代码进行字符串到日期的转换: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
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