0
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VTIMEZONE
TZID:Asia/Calcutta
X-LIC-LOCATION:Asia/Calcutta
BEGIN:STANDARD
DTSTART:18800101T000000
RDATE;VALUE=DATE-TIME:18800101T000000
TZNAME:HMT
TZOFFSETFROM:+055328
TZOFFSETTO:+055320
END:STANDARD
BEGIN:STANDARD
DTSTART:19411001T000000
RDATE;VALUE=DATE-TIME:19411001T000000
TZNAME:BURT
TZOFFSETFROM:+055320
TZOFFSETTO:+0630
END:STANDARD
BEGIN:STANDARD
DTSTART:19420515T000000
RDATE;VALUE=DATE-TIME:19420515T000000
RDATE;VALUE=DATE-TIME:19451015T000000
TZNAME:IST
TZOFFSETFROM:+0630
TZOFFSETTO:+0530
END:STANDARD
BEGIN:STANDARD
DTSTART:19420901T000000
RDATE;VALUE=DATE-TIME:19420901T000000
TZNAME:IST
TZOFFSETFROM:+0530
TZOFFSETTO:+0630
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
SUMMARY:New Event
UID:D1A9EEAF-AAE9-44B1-92B9-33A620779FA6
DTSTART;X-VOBJ-ORIGINAL-TZID=Asia/Calcutta:20170118T120000Z
DTEND;X-VOBJ-ORIGINAL-TZID=Asia/Calcutta:20170118T130000Z
END:VEVENT
END:VCALENDAR

以上是在 iCloud 上创建的新事件的 ics。我在从 iCloud 获取事件时遇到了一个问题。问题是直接在 iCloud 上创建的事件没有使用 ical.net 进行解析。虽然这是由 dday.ical 解析的。使用 ical.net 创建的事件被正确解析。DDay.iCal 正确解析了上面的 ics。

Using ical.net
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(ics))
IICalendarCollection calendars = Calendar.LoadFromStream(stream, Encoding.UTF8);

Calendar.LoadFromStream 出现错误,错误是 String 未被识别为有效的 DateTime。

Using Dday.iCal
MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(ics))
IICalendarCollection calendars = iCalendar.LoadFromStream(stream, Encoding.UTF8);

上面的 Dday 代码适用于相同的 ics。

4

2 回答 2

0

当我看到这个时,我使用的是当时最新的 2.2.30 版本。这个问题在 2.2.31 版本中得到解决,更高版本也可以修复。请参阅版本 2.2.31 的发行说明:https ://github.com/rianjs/ical.net/blob/master/release-notes.md

我已经检查了这个最新版本,即 2.2.33,它现在工作正常。

于 2017-04-04T09:57:16.083 回答
0

这个问题与 ical.net 未解析的 VTIMEZONE 组件有关。当我们创建获取所有会议的请求时,我们会询问我们想要响应的事件的属性。如果不需要,则从请求中删除时区组件,即不要求时区组件。从您的请求中删除。谢谢

于 2017-03-02T06:30:27.293 回答