我正在研究用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屬性?這與這個奇怪事件的建立方式有關嗎?
這是一個寫得很好的問題。 –