Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中添加截止日期的工作日?_Python_Date - Fatal编程技术网

如何在python中添加截止日期的工作日?

如何在python中添加截止日期的工作日?,python,date,Python,Date,在python中,如何计算将给定的工作日数添加到日期的结果日期?例如:我的开始日期是2018年1月11日,我想知道日期是115个工作日之后(因此不包括周末和节假日)。这就足够了。不是最快或最干净的解决方案,但易于理解,并且不使用任何外部库: #date_calculator.py import datetime as dt def add_working_days(start_date, added_days): # data from https://www.redcort.com/

在python中,如何计算将给定的工作日数添加到日期的结果日期?例如:我的开始日期是2018年1月11日,我想知道日期是115个工作日之后(因此不包括周末和节假日)。

这就足够了。不是最快或最干净的解决方案,但易于理解,并且不使用任何外部库:

#date_calculator.py
import datetime as dt

def add_working_days(start_date, added_days):
    # data from https://www.redcort.com/us-federal-bank-holidays/
    federal_holidays = [dt.date(2018, 1, 1), dt.date(2018, 1, 15),
        dt.date(2018, 2, 19), dt.date(2018, 5, 28), dt.date(2018, 7, 4),
        dt.date(2018, 9, 3), dt.date(2018, 10, 8), dt.date(2018, 11, 12),
        dt.date(2018, 11, 22), dt.date(2018, 12, 25)]

    days_elapsed = 0
    while days_elapsed < added_days:
        test_date = start_date+dt.timedelta(days=1)
        start_date = test_date
        if test_date.weekday()>4 or test_date in federal_holidays:
            # if a weekend or federal holiday, skip
            continue
        else:
            # if a workday, count as a day
            days_elapsed += 1

    return start_date

print(add_working_days(dt.date(2018, 1, 11), 10))
#> 2018-01-26
print(add_working_days(dt.date(2018, 1, 11), 115))
#> 2018-06-26
#date_calculator.py
将日期时间导入为dt
def添加工作日(开始日、添加日):
#数据来自https://www.redcort.com/us-federal-bank-holidays/
联邦假日=[dt.日期(2018年1月1日),dt.日期(2018年1月15日),
日期(2018年2月19日)、日期(2018年5月28日)、日期(2018年7月4日),
日期(2018年9月3日)、日期(2018年10月8日)、日期(2018年11月12日),
转让日期(2018年11月22日),转让日期(2018年12月25日)]
已用天数=0
已过去的天数<增加的天数:
测试日期=开始日期+时间增量(天数=1)
开始日期=测试日期
如果test_date.weekday()大于4或test_date在联邦假日:
#如果是周末或联邦假日,请跳过
持续
其他:
#如果是一个工作日,则计为一天
已用天数+=1
返回开始日期
打印(添加工作日(日期(2018年1月11日)和10日))
#> 2018-01-26
打印(增加工作日(日期(2018年1月11日)和115日))
#> 2018-06-26

美国联邦假日这不是编码问题;这是政治。到目前为止你试过什么?我想你可能会列出联邦假日的
列表,然后
循环查看你要添加的天数,检查它们是否在列表中或是否是周末。如果其中一个是真的,不要计算它。编程的关键技能之一是学习如何将问题转化为算法。向我们展示您到目前为止所掌握的知识,伪代码将是完美的,我们将提供帮助。您可以使用另一个库来帮助进行计算吗?实际上,pandas.tseries.holiday import USFederalHolidayCalendar也会提供帮助。这是一个编码问题,非常感谢。正是我需要的。