iCal及iCalendar说明

标准

RFC 4791: Calendaring Extensions to WebDAV (CalDAV)

说明

https://www.kanzaki.com/docs/ical/

什么是ical文件

     iCal 又称 iCalendar,是一种标准的互联网日历格式,让用户能够在各种计算机和各种程序之间创建和共享电子日历。
    一言蔽之,可以理解成可以向日历导入事件的文件。

具体格式

  1. ical文件以.ics结尾

  2. ical文件的编写格式

BEGIN:VCALENDAR
   VERSION:2.0
   PRODID:-//Example Corp.//CalDAV Client//EN
   BEGIN:VTIMEZONE
   LAST-MODIFIED:20040110T032845Z
   TZID:US/Eastern
   BEGIN:DAYLIGHT
   DTSTART:20000404T020000
   RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
   TZNAME:EDT
   TZOFFSETFROM:-0500
   TZOFFSETTO:-0400
   END:DAYLIGHT
   BEGIN:STANDARD
   DTSTART:20001026T020000
   RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
   TZNAME:EST
   TZOFFSETFROM:-0400
   TZOFFSETTO:-0500
   END:STANDARD
   END:VTIMEZONE
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060102T120000
   DURATION:PT1H
   RRULE:FREQ=DAILY;COUNT=5
   SUMMARY:Event #2
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   BEGIN:VEVENT
   DTSTAMP:20060206T001121Z
   DTSTART;TZID=US/Eastern:20060104T140000
   DURATION:PT1H
   RECURRENCE-ID;TZID=US/Eastern:20060104T120000
   SUMMARY:Event #2 bis
   UID:00959BC664CA650E933C892C@example.com
   END:VEVENT
   END:VCALENDAR

例子1

BEGIN:VCALENDAR
VERSION:2.0
X-WR-CALNAME:北京游玩安排
X-APPLE-CALENDAR-COLOR:#540EB9
X-WR-TIMEZONE:Asia/Shanghai
BEGIN:VEVENT
UID:2020-0124-0001
DTSTART;VALUE=DATE:20200807T165000
DTEND;VALUE=DATE:20200807T165500
SUMMARY:购物
DESCRIPTION:买特产
LOCATION:王府井     
SEQUENCE:0
BEGIN:VALARM
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
ACTION:NONE
END:VALARM
END:VEVENT
END:VCALENDAR

为了方便理解,我将代码写出下面的格式,但是实际上,上面的代码格式是正确的

BEGIN:VCALENDAR               #固定写法,ical文件以BEGIN:VCALENDAR开头        
|  VERSION:2.0                #固定写法
|  X-WR-CALNAME:北京游玩安排   #日历名称
|  X-APPLE-CALENDAR-COLOR:#540EB9  #该日历事件的颜色
|  X-WR-TIMEZONE:Asia/Shanghai     #时区,中国默认写Asia/Shanghai
|  
|  BEGIN:VEVENT                                  #固定写法,表示一个日历事件的开始
|  |  UID:2020-0124-0001                         #这个日历事件的id,是唯一的,可自定义
|  |  DTSTART;VALUE=DATE:20200807T165000         #事件开始时间:年-月-日-T-时-分-秒
|  |  DTEND;VALUE=DATE:20200807T165500           #事件结束时间:年-月-日-T-时-分-秒
|  |  SUMMARY:购物                               #事件名称
|  |  DESCRIPTION:买特产                         #事件描述(备注)
|  |  LOCATION:北京王府井                        #事件地点
|  |  SEQUENCE:0                                 #固定写法
|  |  BEGIN:VALARM                               #设置闹钟提醒,这里设置的是无需闹钟提醒
|  |  |  TRIGGER;VALUE=DATE-TIME:19760401T005545Z
|  |  |  ACTION:NONE
|  |  END:VALARM
|  END:VEVENT                                    #固定写法,表示一个日历事件的结束
|
END:VCALENDAR                #固定写法,ical文件以END:VCALENDAR结尾

当想在一个日历中添加多个时间时,只需要在BEGIN:VCALENDAR----END:VCALENDAR之间按照BEGIN:VEVENT----END:VEVENT代码的格式添加日历事件即可。

例子2

ical 格式大概是这样的:

BEGIN:VCALENDAR
PRODID:-//HeYSH//HeYSH Calendar 70.9054//CN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:课程表
X-WR-TIMEZONE:Asia/Shanghai
X-WR-CALDESC:
BEGIN:VTIMEZONE
TZID:Asia/Shanghai
X-LIC-LOCATION:Asia/Shanghai
BEGIN:STANDARD
TZOFFSETFROM:+0800
TZOFFSETTO:+0800
TZNAME:CST
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=Asia/Shanghai:20120901T092000
DTEND;TZID=Asia/Shanghai:20120901T105000
DTSTAMP:20120622T160054Z
UID:%u4F20%u70ED%u5B66%20%u5BF9%u6D41%u5B9E%u9A8C35@第 1 次
CREATED:20120622T154824Z
DESCRIPTION:教师:王五n
LAST-MODIFIED:20120622T160041Z
LOCATION:大礼堂
STATUS:CONFIRMED
SUMMARY:实验2
END:VEVENT
END:VCALENDAR

基本上只要修改中文部分的内容就好了

tips:

  • PRODID 按照格式随意改就好
  • UID 是一件事情的绝对标识,对格式没有要求,只要不重复即可
  • 重复事件可用 RRLUE 字段,具体见所附文档。但是好像不支持 “1,2,5-9,13,16 周” 这样猎奇的重复
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iCal4j 是一个 Java 编写的处理 iCalendar(.ics)文件的库,可以实现 iCalendar 文件的解析、生成、修改等操作。下面介绍一些常用的 iCal4j 库的使用方法。 1. 解析 iCalendar 文件 ```java // 创建一个文件输入流 FileInputStream fin = new FileInputStream("example.ics"); // 创建一个 iCalendar 解析器 CalendarBuilder builder = new CalendarBuilder(); // 解析 iCalendar 文件 Calendar calendar = builder.build(fin); // 遍历日历组件 for (Component component : calendar.getComponents()) { // 处理每个日历组件 } ``` 2. 生成 iCalendar 文件 ```java // 创建一个空的日历对象 Calendar calendar = new Calendar(); // 创建一个事件对象 Date start = new Date(); Date end = new Date(start.getTime() + 3600000); DateTime startDt = new DateTime(start); DateTime endDt = new DateTime(end); VEvent event = new VEvent(startDt, endDt, "iCal4j Event"); // 将事件添加到日历中 calendar.getComponents().add(event); // 创建一个文件输出流 FileOutputStream fout = new FileOutputStream("example.ics"); // 将日历对象写入文件 CalendarOutputter outputter = new CalendarOutputter(); outputter.output(calendar, fout); ``` 3. 修改 iCalendar 文件 ```java // 创建一个文件输入流 FileInputStream fin = new FileInputStream("example.ics"); // 创建一个 iCalendar 解析器 CalendarBuilder builder = new CalendarBuilder(); // 解析 iCalendar 文件 Calendar calendar = builder.build(fin); // 获取日历中的一个事件 VEvent event = (VEvent) calendar.getComponent(Component.VEVENT); // 修改事件的标题 event.getProperties().getProperty(Property.SUMMARY).setValue("New Title"); // 创建一个文件输出流 FileOutputStream fout = new FileOutputStream("example.ics"); // 将修改后的日历对象写入文件 CalendarOutputter outputter = new CalendarOutputter(); outputter.output(calendar, fout); ``` 除了以上介绍的方法,iCal4j 还提供了许多其他的功能,例如处理时区、重复事件、提醒等。详细的 API 文档可以参考官方网站。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值