我的应用程序解析提供的.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库会很棒。如果你也建议用其他语言,我只需要算法即可。我可以自己将其转换为工作代码。