Add n business days to a given date ignoring holidays and weekends in python

前端 未结 11 648
天涯浪人
天涯浪人 2020-12-05 10:32

I\'m trying to add n (integer) working days to a given date, the date addition has to avoid the holidays and weekends (it\'s not included in the working days)

11条回答
  •  星月不相逢
    2020-12-05 10:59

    Skipping weekends would be pretty easy doing something like this:

    import datetime
    def date_by_adding_business_days(from_date, add_days):
        business_days_to_add = add_days
        current_date = from_date
        while business_days_to_add > 0:
            current_date += datetime.timedelta(days=1)
            weekday = current_date.weekday()
            if weekday >= 5: # sunday = 6
                continue
            business_days_to_add -= 1
        return current_date
    
    #demo:
    print '10 business days from today:'
    print date_by_adding_business_days(datetime.date.today(), 10)
    

    The problem with holidays is that they vary a lot by country or even by region, religion, etc. You would need a list/set of holidays for your use case and then skip them in a similar way. A starting point may be the calendar feed that Apple publishes for iCal (in the ics format), the one for the US would be http://files.apple.com/calendars/US32Holidays.ics

    You could use the icalendar module to parse this.

提交回复
热议问题