使用Python对假期/工作日进行多步日期检查

时间:2018-12-04 11:59:00

标签: python loops date datetime calendar

方案::我正在尝试构建一个用于日期检查的功能。该功能的输入是:年,月和假期列表(仅几天的列表)。该函数将检查input_date是否在假期列表中,如果在假期列表中,则它将总计一天到input_date。接下来,它将检查哪个工作日是:星期六(总和2),星期日(总和1)。

问题:我的问题是,如果我仅创建几个if子句来检查这些条件,那么周末检查之后的新日期也可能会在假期列表中,因此该过程应该一直重复直到找到不在假期清单上的工作日。

问题:有没有办法将这些检查循环包含进来?

到目前为止的

代码:

def datecheck (input_year, input_month, holiday_list):      
    datetime.inputdate =  date(year, month, 1) 

        # this checks if inputdate is a holiday   
        if inputdate is in holiday_list: 
            inputdate == inputdate + datetime.timedelta(days=1)

        # next part guarantees inputdate is a weekday
        if inputdate.weekday() == 5: 
            inputdate == inputdate + datetime.timedelta(days=2)
        else if inputdate.weekday() == 6:
            inputdate == inputdate + datetime.timedelta(days=1)

        #check again for holiday?

        outputdate = inputdate
    return outputdate

1 个答案:

答案 0 :(得分:2)

while循环可以解决问题:

    # this checks if inputdate is a holiday   
    while inputdate in holiday_list: 
        inputdate == inputdate + datetime.timedelta(days=1)

它将一直运行代码,直到表达式(如果输入日期位于holiday_list中)为假。

将其余逻辑添加到循环中的示例:

def datecheck (input_year, input_month, holiday_list):      
    inputdate =  date(input_year, input_month, 1) 

    valid = False

    while not valid:
        # this checks if inputdate is a holiday   
        if inputdate is in holiday_list: 
            inputdate == inputdate + datetime.timedelta(days=1)

        # next part guarantees inputdate is a weekday
        elif inputdate.weekday() == 5: 
            inputdate == inputdate + datetime.timedelta(days=2)

        elif inputdate.weekday() == 6:
            inputdate == inputdate + datetime.timedelta(days=1)

        else:
            valid = True

    return inputdate

我也清理了其他几件事:

  • else if应该是elif,而is in应该只是in
  • 循环到位后就不需要
  • outputdate,因为一旦循环完成,inputdate将具有正确的值
  • 我假设
  • datetime.inputdate应该是inputdatedatetime是标准库中模块的名称,但没有inputdate属性
  • 第一个if及其后的语句缩进得太远
  • 我也将正确的参数名称放入date()中,但是请注意,您需要在此代码上方加上from datetime import date之类的东西,以便识别date