python生成日历_使用python生成ical日历文件——将课程表导入到手机日历

1 importdatetime,os2

3 classEvent:4 """

5 事件对象6 """

7 def __init__(self,kwargs):8 self.event_data =kwargs9

10 def __turn_to_string__(self):11 self.event_text = "BEGIN:VEVENT\n"

12 for item,data inself.event_data.items():13 item = str(item).replace("_","-")14 if item not in ["ORGANIZER","DTSTART","DTEND"]:15 self.event_text += "%s:%s\n"%(item,data)16 else:17 self.event_text += "%s;%s\n"%(item,data)18 self.event_text += "END:VEVENT\n"

19 returnself.event_text20

21 classCalendar:22 """

23 日历对象24 """

25 def __init__(self,calendar_name="My Calendar"):26 self.__events__ ={}27 self.__event_id__ =028 self.calendar_name =calendar_name29

30 def add_event(self,**kwargs):31 event =Event(kwargs)32 event_id = self.__event_id__

33 self.__events__[self.__event_id__] =event34 self.__event_id__ += 1

35 returnevent_id36

37 def modify_event(self,event_id,**kwargs):38 for item,data inkwargs.items():39 self.__events__[event_id].event_data[item] =data40

41 defremove_event(self,event_id):42 self.__events__.pop(event_id)43

44 defget_ics_text(self):45 self.__calendar_text__ = """BEGIN:VCALENDAR\nPRODID:-//ZHONG_BAI_REN//APPGENIX-SOFTWARE//\nVERSION:2.0\nCALSCALE:GREGORIAN\nMETHOD:PUBLISH\nX-WR-CALNAME:%s\nX-WR-TIMEZONE:null\n"""%self.calendar_name46 for key,value in self.__events__.items():47 self.__calendar_text__ += value.__turn_to_string__()48 self.__calendar_text__ += "END:VCALENDAR"

49 return self.__calendar_text__

50

51 defsave_as_ics_file(self):52 ics_text =self.get_ics_text()53 open("%s.ics"%self.calendar_name,"w",encoding="utf8").write(ics_text)#使用utf8编码生成ics文件,否则日历软件打开是乱码54

55 defopen_ics_file(self):56 os.system("%s.ics"%self.calendar_name)57

58 defadd_event(cal, SUMMARY, DTSTART, DTEND, DESCRIPTION, LOCATION):59 """

60 向Calendar日历对象添加事件的方法61 :param cal: calender日历实例62 :param SUMMARY: 事件名63 :param DTSTART: 事件开始时间64 :param DTEND: 时间结束时间65 :param DESCRIPTION: 备注66 :param LOCATION: 时间地点67 :return:68 """

69 time_format = "TZID=Asia/Shanghai:{date.year}{date.month:0>2d}{date.day:0>2d}T{date.hour:0>2d}{date.minute:0>2d}00"

70 dt_start = time_format.format(date=DTSTART)71 dt_end = time_format.format(date=DTEND)72 create_time = datetime.datetime.today().strftime("%Y%m%dT%H%M%SZ")73 cal.add_event(74 SUMMARY=SUMMARY,75 ORGANIZER="CN=My Calendar:mailto:nobody@gmail.com",76 DTSTART=dt_start,77 DTEND=dt_end,78 DTSTAMP=create_time,79 UID="{}-11@appgenix-software.com".format(create_time),80 SEQUENCE="0",81 CREATED=create_time,82 DESCRIPTION=DESCRIPTION,83 LAST_MODIFIED=create_time,84 LOCATION=LOCATION,85 STATUS="CONFIRMED",86 TRANSP="OPAQUE"

87 )88

89 if __name__ == '__main__':90 calendar = Calendar(calendar_name="test")91 add_event(calendar,92 SUMMARY="测试",93 DTSTART=datetime.datetime(year=2019,month=2,day=19,hour=21,minute=21,second=00),94 DTEND=datetime.datetime(year=2019,month=2,day=19,hour=21,minute=30,second=00),95 DESCRIPTION="测试事件",96 LOCATION="我也不知道在哪儿")97 print(calendar.get_ics_text())98 calendar.save_as_ics_file()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值