从.ics文件

时间:2016-02-25 12:06:40

标签: calendar timezone icalendar timezone-offset

我的应用程序解析提供的.ics文件,并以UTC格式获取日历事件的开始和结束时间。请参见示例.ics文件 下方。

BEGIN:VCALENDAR
BEGIN:VTIMEZONE
TZID:
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=1SU;BYMONTH=11
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=2SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ORGANIZER;CN=blah:MAILTO:someone@blah.com
DESCRIPTION;LANGUAGE=en-US:
RRULE:FREQ=YEARLY;COUNT=30;INTERVAL=1;BYMONTHDAY=9;BYMONTH=4
SUMMARY;LANGUAGE=en-US: This is summary
DTSTART;TZID=:20160409T000000
DTEND;TZID=:20160410T000000
UID:f663243d-17f2-424a-a52c
RECURRENCE-ID;TZID=:20160409T000000
PRIORITY:5
DTSTAMP:20150701T123848Z
TRANSP:OPAQUE
STATUS:CONFIRMED
SEQUENCE:0
LOCATION;LANGUAGE=en-US:
END:VEVENT
END:VCALENDAR

我遇到过DTSTART / DTEND没有提到TZID的情况(如上面的.ics文件中所示), 或者TZID是一些随机字符串,你无法从中找出时区。

我认为在这种情况下获取时区信息的唯一方法是解析VTIMEZONE块以确定 时区偏移量然后将其应用于开始和结束时间以获得UTC值。

有人可以帮我解决算法(或指向现有的库)来解析VTIMEZONE块并在给定时间获得UTC偏移量。

编辑: 我正在研究python。所以python库会很棒。如果你也建议用其他语言,我只需要算法即可。我可以自己将其转换为工作代码。

1 个答案:

答案 0 :(得分:0)

我不知道您使用的是哪种语言,但biweekly是一个解析iCalendar文件的Java库。它还可以从VTIMEZONE组件中解析时区信息。