# 获取指定月份的放假日期(周末+法定节假日)
3 min read
python
import calendarimport requestsimport 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("---------------------------------------------------------------------")