python
import calendar
import requests
import json
#计算每月休息日 以及 工作日
class Calendar:
def __init__(self, year, month):
self.year = year
self.month = month
self.days = calendar.monthcalendar(year, month)
self.alldays = []
self.workdays = []
self.restdays = []
self.specialdays = {} #特殊日子
self.res_data = ""
for i in range(len(self.days)):
for j in range(len(self.days[i])):
if self.days[i][j] != 0:
self.alldays.append(self.days[i][j]) #本月天数
# 星期一到星期五
if self.days[i][0] != 0:
self.workdays.append(self.days[i][0]) #星期一
if self.days[i][1] != 0:
self.workdays.append(self.days[i][1]) #星期二
if self.days[i][2] != 0:
self.workdays.append(self.days[i][2]) #星期三
if self.days[i][3] != 0:
self.workdays.append(self.days[i][3]) #星期四
if self.days[i][4] != 0:
self.workdays.append(self.days[i][4]) #星期五
# 星期六和星期天
if self.days[i][5] != 0:
self.restdays.append(self.days[i][5]) #星期六
if self.days[i][6] != 0:
self.restdays.append(self.days[i][6]) #星期天
self.get_holiday(year, month) #获取法定节假日,并且添加到restdays
self.workdays = set(self.workdays)
self.restdays = set(self.restdays)
# 获取法定节假日
def get_holiday(self, year, month):
url = "http://timor.tech/api/holiday/year/{year}-{month}".format(year=year, month=month)
r = requests.get(url, timeout=20)
data = json.loads(r.text) #字符串转字典
if data["code"] == 0:
for i in data["holiday"]:
if data["holiday"][i]["holiday"] == True:
self.specialdays[data["holiday"][i]["date"]] = {"休息原因": data["holiday"][i]["name"], "工资倍数": data["holiday"][i]["wage"]}
#print(i, data["holiday"][i]["name"])
self.restdays.append(int("".join(i[-2:])))
if int("".join(i[-2:])) in self.workdays: #如果这天本来是工作日,则在workdays里删除
self.workdays.remove(int("".join(i[-2:])))
if data["holiday"][i]["holiday"] == False:
self.specialdays[data["holiday"][i]["date"]] = {"上班原因": data["holiday"][i]["name"], "工资倍数": data["holiday"][i]["wage"]}
#print(i, data["holiday"][i]["name"])
self.workdays.append(int("".join(i[-2:])))
if int("".join(i[-2:])) in self.restdays: #如果这天本来是休息日,则在restdays里删除
self.restdays.remove(int("".join(i[-2:])))
self.res_data = data
# 获取完整日历
def get_calendar(self):
cal = calendar.month(self.year, self.month)
return cal
def debug_print(self):
#print(self.days) #每天
print(type(self.get_calendar))
print(self.get_calendar()) #完整日历
print("当前月一共有{:^4}天".format(len(self.alldays))) #本月天数
print("休息日一共有{:^4}天".format(len(self.restdays)), self.restdays) #休息日
print("工作日一共有{:^4}天".format(len(self.workdays)), self.workdays) #工作日
#特殊日子
print("特殊日子一共有", len(self.specialdays), "天")
for i in self.specialdays:
print(i, self.specialdays[i])
if __name__ == "__main__":
A = Calendar(2022, 7)
A.debug_print()
print(A.res_data)
print("---------------------------------------------------------------------")