我正在研究用C++编写的iCal解析器。在这种情况下,我注意到几个事件,都是由Thunderbird生成的,我的解析器无法正确解析。iCal - 由Thunderbird生成的奇怪事件
下面是这些事件的一个样本:
BEGIN:VEVENT
CREATED:20170111T221139Z
LAST-MODIFIED:20170111T221145Z
DTSTAMP:20170111T221145Z
UID:882f4c15-03e9-451c-bf4f-b3422ed8ef54
RDATE;VALUE=DATE-TIME:20170111T163000Z
DTSTART;TZID=Europe/Berlin:20170111T173000
DTEND;TZID=Europe/Berlin:20170111T173000
X-MOZ-FAKED-MASTER:1
X-MOZ-GENERATION:1
END:VEVENT
BEGIN:VEVENT
CREATED:20170106T215137Z
LAST-MODIFIED:20170111T221145Z
DTSTAMP:20170111T221145Z
UID:882f4c15-03e9-451c-bf4f-b3422ed8ef54
SUMMARY:Obst
RECURRENCE-ID;TZID=Europe/Berlin:20170111T173000
DTSTART;TZID=Europe/Berlin:20170111T194500
DTEND;TZID=Europe/Berlin:20170111T201500
SEQUENCE:7
TRANSP:OPAQUE
X-MOZ-GENERATION:12
END:VEVENT
我注意到此事件上几个特殊功能:
- 主要事件不包含摘要,只有链接的异常包含一个。
- 开始日期和结束日期相等。
- 主事件不包含任何重复规则(RRULE),但它包含重复日期(RDATE)。
- 主要事件中的重现日期位于事件开始日期和时间前30分钟。
我试图在Google日历和Outlook中导入它。在Google日历中,该事件显示在正确的日期和时间,闹钟设置为事件发生前30分钟。使用Outlook(2013)我只能部分导入事件,并显示以下屏幕截图中显示的错误消息。我想只有第二个VEVENT被导入,因为第一个是不包含标题的。
这个事件是如何建立我想不通。为此,我有几个问题:
- 此事件是否正确生成,或者它可能是Thunderbird日历中的错误?
- RDATE模式可能不存在RRULE?这是有道理的吗?
- 应该将RDATE模式中的日期视为警报而不是最终重现的发生?
- 在这种情况下,主事件和他的例外之间的关系是什么,因为主事件不包含RDATE模式之外的任何重复规则,这似乎不是一个真正的重复规则?
- 什么可能意味着未记录的X-MOZ-FAKED-MASTER属性?这与这个奇怪事件的建立方式有关吗?
这是一个写得很好的问题。 –