繁体   English   中英

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

[英]How can I check if the date lies between two dates coming from loop

我被困在一个点上,我试图检查日期是否在两个日期之间,日期来自带有 for 循环的 python 的对象。

Date_from 是开始日期,例如01-04-2021

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

check_in 是我要检查的日期,例如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")

我也尝试过这段代码,但没有成功。

if check_in.date() in ((d.date_from.date() for d in holidays) or ((d.date_to.date() for d in holidays))):
    print("date is in between")
else:
    print("Not in between")    

这里指的是这个URL 源来检查日期位于两个日期之间我收到此错误。

TypeError:“生成器”和“生成器”的实例之间不支持“<”

谁能指导我如何检查它?

您可以使用any来测试holydays的任何元素是否匹配:

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

如果我理解正确,您正在尝试执行以下操作:

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")

我认为您最初的尝试是尝试一次检查所有日期。 相反,您需要遍历假期列表并一次检查一个日期。

我认为这应该做你想做的事:

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")

然而,这假设了几件事:

  1. 'dd-mm-yyyy' 格式的字符串是在对象上运行.date()所返回的内容。
  2. 您只希望打印语句最后一次,以查看日期是否适合任何假期。

所以我制作了一个小的 function 用于将您的字符串日期转换为可用于制作datetime.date对象的整数列表。 然后,将您的日期作为date对象,您只需比较上面链接的答案中显示的日期即可。

请注意,最后一个else语句用于for循环。

让我知道这是否适合您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM