iCalendar

✍ dations ◷ 2025-06-10 00:36:32 #文件格式,日程管理软件

iCalendar是“日历数据交换”的标准(RFC 5545)。此标准有时指的是“iCal”,即苹果公司的出品的一款同名日历软件(见iCal),这个软件也是此标准的一种实现方式。

iCalendar允许用户通过电子邮件的方式发送“会议请求”或“任务”。收信人使用支持iCalendar邮件客户端,便可以很方便地回应发件人,接受请求或另外提议一个新的会议时间。

iCalendar已得到很多产品的支持。通常情况下,iCalendar数据是使用电子邮件交换,但它也可以独立使用,而不局限于某种传输协议。例如,可以通过WebDav服务器或SyncML来进行共享与修改。简单的网页服务器(只使用HTTP协议)也常常被用来分发公共事件的iCalendar数据,或发布个人的时间谋划安排。发布者可以使用hCalendar把iCalendar数据嵌入到网页中。(hCalendar是一种通过(X)HTML来表现iCalendar的微格式)

iCalendar是由互联网工程任务组的日历与计划工作组设计(OpenText公司的Anik Ganguly主导),并由莲花公司的Frank Dawson和微软的Derik Stenerson发表。iCalendar本身是基于互联网邮件协会(IMC)的vCalendar开发设计而来的。它通常是以文件名后缀为.ics或.ifb的文本文件保存的。现有标准是于2009年九月发布的RFC 5545,上一个标准是RFC 2445。

以.ics为后缀名的文件(在Apple Mac系统中使用"iCal"类型代码),表示该文件包含了日历和计划信息。而以.ifb为后缀名的文件(在Apple Mac系统中使用"iFBf"类型代码),表示该文件包含 了空闲和忙碌时间信息。

通常iCalendar使用UTF-8字符编码;但也可以使用MIME中的charset参数来指其它的字符编码(如果它的传送协议支持MIME的话)。

在iCalendar文件中,每一行必须以CR+LF(十六进制代码为0D0A)为结尾。每一行不得超过75字节/八字节。如果一行数据长于这个限制,则必须换行;后面一行使用空格符(十六进制代码为20)或者制表符(十六进制代码为09)作开始,以表示本行内容是上面一行内容的继续。内容数据中的换行符,可以反斜杠符'/'后跟数字(UTF-8中为5C 6E或5C 4E)来表示。

iCalendar的MIME类型被定义为。

iCalendar格式只是被设计用来传送日历和计划表数据,如事件;而故意没有定义操作这些数据的行为。因为,在编写程序时需要协商如何操作它们。

iCalendar本意是提供一种公共格式来定义开放的互联网可交换的日历和计划表数据。当这些特性被广泛支持应用后,很多性能问题逐渐显现出来了。比如,大多数应用都不支持旅行(VJOURNAL)。"在标准中,循环重复的会议有一些含糊不清,这导致在现有不同的应用之间仍然无法真正地互动。"

iCalendar中的日历无法兼容非格里高利历,比如以色列的希伯来历和沙特阿拉伯的伊斯历都是阴历。

“日历访问协议”备忘录(RFC 4324)首次尝试建立一个统一的创建实时日历系统。可能是因为过于复杂,这个协议最终被放弃了。

无论如何,像GroupDav和CalDAV这些基于iCalendar的协议已经越来越广泛地应用在客户端和服务端软件包中了。

互联网工程任务组的日历与计划工作组 已经提交了关于iCalendar标准的附加修改提案。但这个工作组于2011年一月份被解散了。他们大部分工作重心转移到了前一个标准的条款解释。而后续的创新工作由日历和计划协会(简称为Calconnect)来完成。

iCalendar中的顶级元素是日历和计划核心对象,一组日历和计划信息。通常情况下,这些信息应该只包含单一的iCalendar对象。但可以声明一个组包含多个iCalendar对象。

第一行必须是"BEGIN:VCALENDER",最后一行必须是"END:VCALENDER";两行之间数据称之为"icalbody"。

icalbody由一系列日历属性和一个以上的日历组件组成。日历属性被应用于整个日历。日历组件则是由若干日历属性描述成的一个日历语义。比如,日历组件可以指定一个事件、一个待办事项列表、一个旅行事项、时区信息、繁忙/空闲时间信息,或者一个警报。在许多协议实现(比如Google Calendar)中不允许出现空行。

下在是一个简单的iCalendar对象示例,它描述了法国国庆日,即从1997年七月14日 17:00到1997年七月15日 03:59:59的巴士底日。

BEGIN:VCALENDARVERSION:2.0PRODID:-//hacksw/handcal//NONSGML v1.0//ENBEGIN:VEVENTUID:uid1@example.comDTSTAMP:19970714T170000ZORGANIZER;CN=John Doe:MAILTO:john.doe@example.comDTSTART:19970714T170000ZDTEND:19970715T035959ZSUMMARY:Bastille Day PartyEND:VEVENTEND:VCALENDAR

事件(VEVENT)

VEVENT描述一个事件,在日历上一系列计划好的时间点。通常,当用户接受一个日历事件,这将导致在那个时间里,用户被认为是忙碌的。VEVENT可以包含一个VALARM对象来允许一个警报。事件应该有一个DTSTART来描述事件的开始时间,和一个DTEND来描述事件的结束时间。如果事件是循环的,则DTSTART应该设置第一个事件的开始时间。

VEVENT同样可以应用在没有特定时间的日历事件上,比如周年纪念日、每日提醒。

如果你需要发送取消事件的请求。那么在请求中事件组件中,UID属性应该与原事件一致并且,下面这些属性应该设置成cancel。

METHOD:CANCELSTATUS:CANCELLED

为了发送事件的更新请求,除了设置UID和其它更新属性值外。还需要设置新序列值

SEQUENCE:<新序列值>

比如,第一个更新版本

SEQUENCE:1

在Microsoft Outlook中,SUMMARY属性应当与"Appointment"中的"Subject"项一致,DESCRIPTION 属性紧跟着SUBJECT属性。另外,Outlook 2003要求指定UID和DTSTAMP属性。

VTODO描述一条待办事项。

下面的例子描述了一个应于1998年四月15日的待办事项。届时一个响铃将会响起。在待办事项完成前,将会一小时提醒一次,共提醒四次。SEQUENCE属性显示这条提醒在创建之后,还被修改了两次。

BEGIN:VCALENDARVERSION:2.0PRODID:-//ABC Corporation//NONSGML My Product//ENBEGIN:VTODODTSTAMP:19980130T134500ZSEQUENCE:2UID:uid4@host1.comACTION:AUDIOTRIGGER:19980403T120000ATTACH;FMTTYPE=audio/basic:http://example.com/pub/audio-    files/ssbanner.audREPEAT:4DURATION:PT1HEND:VTODOEND:VCALENDAR

旅行事项(VJOURNAL)

VJOURNAL是一个旅行事项。它们将一段描述文字关联一个详细的日历日期上,这可以被用户记录活动和成长日志,或者描述待办事项的进展。VJOURNAL日历组件不会影响日历上的时间状况,所以不会对空闲和繁忙状态有任何影响。在实践上,有很少的程序支持VJOURNAL项,不过也有存在一些实现。比如:Plum Canary's Chirp软件将VJOURNAL和VTODO一起使用。KDE中的KOrganizer也支持VJOURNAL。

下面就是旅行事项的例子

BEGIN:VCALENDARVERSION:2.0PRODID:-//ABC Corporation//NONSGML My Product//ENBEGIN:VJOURNALDTSTAMP:19970324T120000ZUID:uid5@host1.comORGANIZER:MAILTO:jsmith@example.comSTATUS:DRAFTCLASS:PUBLICCATEGORIES:Project Report, XYZ, Weekly MeetingDESCRIPTION:Project xyz Review Meeting Minutes\n    Agenda\n1. Review of project version 1.0 requirements.\n2.    Definition    of project processes.\n3. Review of project schedule.\n     Participants: John Smith, Jane Doe, Jim Dandy\n-It was      decided that the requirements need to be signed off by      product marketing.\n-Project processes were accepted.\n     -Project schedule needs to account for scheduled holidays      and employee vacation time. Check with HR for specific      dates.\n-New schedule will be distributed by Friday.\n-     Next weeks meeting is cancelled. No meeting until 3/23.END:VJOURNALEND:VCALENDAR

注意: 这个例子中来自于RFC 2445。在这里将原文中的CATEGORY修正为CATEGORIES,这是原文中的一个错误。

VFREEBUSY被用在 空闲/繁忙时间 设置请求,这种请求的回应,以及繁忙时间的发布中。下面就是一个系统时间发布的例子。

BEGIN:VCALENDARVERSION:2.0PRODID:-//RDU Software//NONSGML HandCal//ENBEGIN:VFREEBUSYORGANIZER:MAILTO:jsmith@example.comDTSTART:19980313T141711ZDTEND:19980410T141711ZFREEBUSY:19980314T233000Z/19980315T003000ZFREEBUSY:19980316T153000Z/19980316T163000ZFREEBUSY:19980318T030000Z/19980318T040000ZURL:http://www.example.com/calendar/busytime/jsmith.ifbEND:VFREEBUSYEND:VCALENDAR

其它组件类型

其它组件类型还有VTIMEZONE(时区)和VALARAM(警报)。还有一些组件允许包含其它组件(VALARAM通常被包含于其它组件)。

当计划事件更改,UID字段将发布更新。首先事件创建时会生成一个全局唯一标识符作为UID。之后当有一个事件跟随这个UID发布,则认为这是早先事件的修改版本,并替换掉它。

iCalendar支持私有扩展,即在属性名前冠以"X-"前缀。

比如:

相关

  • 氧氟沙星氧氟沙星(氟嗪酸, Ofloxacin)是一种人工合成、广谱抗菌的氟喹诺酮类药物。氧氟沙星合成于1982年,口服易吸收,快而完全,血药浓度高而持久,药物体内分布广。此抗生素适合做为最后一线
  • Sagan, C.卡尔·爱德华·萨根(英语:Carl Edward Sagan,1934年11月9日-1996年12月20日),美国天文学家、天体物理学家、宇宙学家、科幻作家,和非常成功的天文学、天体物理学等自然科学方面的科
  • 波士顿环球报《波士顿环球报》(英语:The Boston Globe,有时会缩写为“环球报(The Globe)”)是总部设于麻省波士顿的一间美国报章机构,由查尔斯‧泰勒(英语:Charles H. Taylor (publisher))于1872年
  • 古埃及历法古埃及的历史相当悠久,历法几经转变,且不同学派有不同的说法。本条目描述的是获得较广泛认同的说法。古埃及人分昼夜各占12“小时”,从日出到日落为昼,从日落到日出为夜。但在一
  • 莎莉·霍金斯莎莉·西西莉亚·霍金斯(英语:Sally Cecilia Hawkins,1976年4月27日-),英国女演员,出生于英国伦敦。莎莉·霍金斯出生于伦敦杜尔维治,在布莱克希斯成长,父亲Colin Hawkins与母亲贾姬
  • 海绵动物门多孔动物门(学名:Porifera)为原始的多细胞生物,也称海绵动物门(Spongiatia或Spongia),一般称为海绵。海绵没有神经元/神经系统、消化和循环系统,相反,它们大多依靠海水流过自己的身体
  • 数理数学物理是数学和物理学的交叉领域,指应用特定的数学方法来研究物理学的某些部分。对应的数学方法也叫数学物理方法。数学和物理学的发展在历史上一直密不可分,许多数学理论是
  • 大白鹭Casmerodius albus (Linnaeus, 1758) Egretta alba (Linnaeus, 1758)大白鹭(学名:Ardea alba),别名白鹭鸶、鹭鸶、风漂公子、白漂鸟、冬庄。鹭科苍鹭属的一种。稻田、河岸、沙滩
  • 米格-15战斗机米格-15战斗机(俄语:МиГ-15,拉丁字母转写:MiG 15)由苏联米高扬-格列维奇飞机设计局设计的,北约给予的绰号是“柴捆(Fagot)”,是苏联第一代战机的代表。米格15也被认为是第一代后掠
  • 八圣道分八圣道分(巴利语:Ariyo aṭṭhaṅgiko maggo,梵语:Ārya aṣṭāṅga mārgaḥ),又译为八正道、八圣道、八支正道、八支圣道、八圣支道,佛教术语,是指佛教徒修行达到最高理想境地涅