引言: 在日常工作中。常常會碰到相似的場景。須要計算在某個時間段内的工作日以及确定某天是否為工作日,這裡的介紹的工具包将很好的解決問題。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yYhVWM1EWMzATZyIWZ0Y2M5cDN1EWNjNmMlNDM3Q2Mw8CXxAzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL1M3Lc9CX6MHc0RHaiojIsJye.png)
1. 工具包Business Holiday介紹
其提供了很easy易用的計算工作日的接口。并同意使用者指定特定日期為假期,進而将其從目前的工作日中剔除。
項目首頁: https://pypi.python.org/pypi/business_calendar/
文檔首頁: http://py-business-calendar.readthedocs.io/en/latest/
2. 功能分析與介紹
Case 1: 計算在某個時間段之内的工作日天數
from business_calendar import Calendar, MO, TU, WE, TH, FR
import datetime
date1 = datetime.datetime(2013,1,10)
# normal calendar, no holidays
cal = Calendar()
date2 = datetime.datetime(2013,3,20)
print('%s days between %s and %s' % (cal.busdaycount(date1, date2), date1, date2))
功能描寫叙述: 計算2013/1/10之後的25天之内的工作日天數:
49 days between 2013-01-10 00:00:00 and 2013-03-20 00:00:00
Case 2: 計算若幹工作日之後的日期
date2 = cal.addbusdays(date1, 25)
print("The specified date will be %s" % date2)
功能描寫叙述: 計算25個工作日之後的日期
The specified date will be 2013-02-14 00:00:00
Case 3: 結合假期,以及星期的概念,計算工作日:
cal = Calendar(workdays=[MO,TU,WE,TH], holidays=['2013-01-17'])
功能描寫叙述: 指定周一到周四工作。1.17日是公衆假期,計算會有多少個工作日:
38 days between 2013-01-10 00:00:00 and 2013-03-20 00:00:00
3. 功能分析
在該類庫中,有workday和businessday的概念:
- addbusydays(date, offset) 其将考慮holidays公休假的因素
- addworkdays(date, offset) 忽略公休假的因素
- busdaycount(date1, date2) 計算兩個時間點直接的工作日
- range(date1, date2) 傳回工作日清單, 考慮假期因素
- isworkday(date) 是否是工作日。忽略公休假的因素
- isbusday(date) 是否工作日,考慮公休假
- isHoliday(date) 是否是假日
4. 總結
business_holiday的包是很強大了,基本覆寫了我們關于假期的需求,大家能夠自行嘗試一下怎樣使用。
如有問題。也能夠回報給我。
最終究竟了,萬惡的切割線.......
---------------------------------------------------------------------------------------------------------------