計算二個時間內有多少個交易日

2021-10-25 14:35:09 字數 1634 閱讀 8749

import datetime

class workdays:

def __init__(self, start_date, end_start, days_off=none):

"""weekday()方法將一個日期轉換對應成星期,以星期一(0)到星期天(6)結束

:param start_date: 開始時間,必須是datetime格式

:param end_start: 結束時間,必須是datetime格式

:param days_off: 休息日,預設為週六週日

"""self.start_date = start_date

self.end_date = end_start

self.days_off = days_off

if self.start_date > self.end_date: # 防止開始日期和結束日期傳入反了

self.start_date, self.end_date = self.end_date, self.start_date

if self.days_off is none: # 休息日為周

六、週日

self.days_off = 5, 6

# 每週工作日列表

self.days_work = [i for i in range(7) if i not in self.days_off]

def workdays(self): # 計算出自定義範圍內有多少個工作日,包含節假日

tag_date = self.start_date

while true:

if tag_date > self.end_date:

break

if tag_date.weekday() in self.days_work: # 判斷日期為非週末

yield tag_date

tag_date += datetime.timedelta(days=1)

def holiday(self): # 計算自定義範圍內節假日佔多少

# a股休市日期

holiday = "20210101,20210211,20210212,20210215,20210216,20210217,20210405,20210503,20210504,20210505,20210614,20210920,20210921,20211001,20211004,20211005,20211006,20211007"

holidaylist = holiday.split(",")

for i in holidaylist:

date = datetime.datetime(int(i[0:4]), int(i[4:6]), int(i[6:8]))

if self.start_date <= date <= self.end_date: # 判斷節假日在自定義的範圍內

if date.weekday() in self.days_work: # 判斷為非週末

yield date

def dayscount(self): # 計算工作日,不包含節假日

return len(list(self.workdays()))-len(list(self.holiday()))