def mkevent(data, cal, dt, isDebug=False): if not data[0]: assert not (data[1] or data[2] or data[3] or data[4]) return weeks, week_day, all_week, classes = get_schedule(data, isDebug) event_class = Event() event_class.add('SUMMARY', data[0]) if data[3] is not None: event_class.add('LOCATION', data[3]) if data[4] is not None: event_class.add('DESCRIPTION', "教师:" + data[4] + "\n教学班号:" + data[1]) else: event_class.add('DESCRIPTION', "教学班号:" + data[1]) for start_class, end_class in classes: for start_week, end_week in weeks: event = event_class.copy() if all_week is False: count = int(end_week) - int(start_week) + 1 event.add("RRULE", {"freq": "weekly", "count": count}) class_start_date = dt + \ datetime.timedelta(weeks=int(start_week) - 1, days=week_dic[week_day] - 1) class_start_time = datetime.timedelta( hours=time_dict[int(start_class)][0][0], minutes=time_dict[int(start_class)][0][1]) class_end_time = datetime.timedelta( hours=time_dict[int(end_class)][1][0], minutes=time_dict[int(end_class)][1][1]) dtstart = class_start_date + class_start_time dtend = class_start_date + class_end_time namespace = uuid.UUID( bytes=int(dtstart.timestamp()).to_bytes(length=8, byteorder='big') + int(dtend.timestamp()).to_bytes(length=8, byteorder='big')) else: dtstart = ( dt + datetime.timedelta(weeks=int(start_week) - 1)).date() dtend = (dt + datetime.timedelta(weeks=int(end_week))).date() namespace = uuid.UUID( bytes=int(dtstart.toordinal()).to_bytes(length=8, byteorder='big') + int(dtend.toordinal()).to_bytes(length=8, byteorder='big')) add_datetime(event, 'DTEND', dtend) add_datetime(event, 'DTSTART', dtstart) event.add('UID', uuid.uuid3(namespace, data[0] + "-" + data[1])) event.add('DTSTAMP', datetime.datetime.now()) cal.add_component(event)