Python 如何检查日期是否介于来自循环的两个日期之间

Python 如何检查日期是否介于来自循环的两个日期之间,python,python-3.x,date,Python,Python 3.x,Date,我正试图检查日期是否在两个日期之间,日期是否来自带有for循环的python对象 日期\u from是起始日期,例如 01-04-2021 截止日期是结束日期,例如05-04-2021 签入是我要签入的日期,例如03-04-2021 Python代码: if check_in.date() in ((d.date_from.date() for d in holidays) < ((d.date_to.date() for d in holidays))): print("

我正试图检查日期是否在两个日期之间,日期是否来自带有for循环的python对象

日期\u from是起始日期,例如 01-04-2021

截止日期是结束日期,例如05-04-2021

签入是我要签入的日期,例如03-04-2021

Python代码:

if check_in.date() in ((d.date_from.date() for d in holidays) < ((d.date_to.date() for d in holidays))):
    print("date is in between")
else:
    print("Not in between")
这里提到这个,我得到了这个错误


TypeError:“如果我理解正确,您正在尝试这样做:

for each holiday
    is the checkin date between the holiday start date and the holiday end date
请注意,我是如何完全用文字来描述的。我使用类似于代码的格式,因为我想得有点超前,但重要的是用文字描述解决方案问题,而不必担心python语法

现在我们可以将这些单词翻译成代码:

# for each holiday
for d in holidays: 
    # is the checkin date between the holiday start date and the holiday end date
    if d.date_from < check_in < d.date_to:
        print("in between")
    else:
        print("not in between")
#每个假期
在假期内如有需要:
#是介于假日开始日期和假日结束日期之间的签入日期
如果d.date_from

我想你最初的尝试是一次检查所有的日期。相反,您需要循环查看假期列表,并一次检查一个日期。

我认为这应该满足您的要求:

from datetime import date

def convert_date(string_date):
    """Takes string date in format dd-mm-yyyy and returns a list of integers in format [yyyy, mm, dd]"""

    return reversed(list(map(int, string_date.split('-'))))

# Create check in date object
check_in_obj = date(*convert_date('03-04-2021'))

for d in holidays:
    # set date obj for date_from and date_to
    date_from_obj = date(*convert_date(d.date_from.date()))
    date_to_obj = date(*convert_date(d.date_to.date()))

    if date_from_obj <= check_in_obj <= date_to_obj:
        print("date is in between")
        break
else:
    print("Not in between")
from datetime导入日期
def转换日期(字符串日期):
“”“采用dd mm yyyy格式的字符串日期,并返回[yyyy,mm,dd]格式的整数列表。”“”
返回已反转(列表(映射(int,string_date.split('-')))
#创建签入日期对象
签入日期=日期(*转换日期('03-04-2021'))
在假期内如有需要:
#设置日期从和日期到的日期对象
date\u from\u obj=date(*转换日期(d.date\u from.date())
date_to_obj=日期(*转换日期(d.date_to.date())

如果来自对象的日期您可以使用
any
来测试
holydays
的任何元素是否匹配:

any(d.date_from.date()<=check_in.date()<d.date_to.date() for d in holidays)

any(d.date\u from.date()你在一行代码中做的太多了。把它分解成更小的部分。如果你用文字描述你解决问题所要采取的步骤,可能会有所帮助。尽可能将其简化为最基本的术语。你这里的不是比较两个日期。@代码学徒你能解释一下吗?我不清楚。那太好了请更清楚地解释你想做什么。与其担心诸如“循环”之类的技术细节,不如用文字说明实际问题。看起来你有一个假期列表和一个“入住”日期。什么是假期?我的意思是在美国,假期通常只有一天,但你似乎有一个“开始日期”和“结束日期”对于这里的每一个。你想对假期和签入日期做些什么?你想解决的实际问题是什么?我只想为OP指出,这也会将签入日期与每个假期分别进行比较。另外,
any()的用例
取决于您是否想知道是否有任何测试成功。如果您想在匹配的特定假日做一些事情,那么您将需要与我在回答中发布的内容类似的东西。(这里的“您”是指OP)
any(d.date_from.date()<=check_in.date()<d.date_to.date() for d in holidays)