在文件中删除/处理时区的好方法


Good way to get rid of / deal with timezones in a ical file?

我正试图从使用php解析的groupware服务器(ics文件)获得我的日历。到目前为止,一切都很好,除了可能为每个事件条目定义额外的时区:

DTSTART;TZID="Amsterdam, Belgrade, Berlin, Brussels, Budapest, Madrid, Paris, Prague, Stockholm":20110723T193000
DTEND;TZID="Amsterdam, Belgrade, Berlin, Brussels, Budapest, Madrid, Paris, Prague, Stockholm":20110724T000000

另一个事件是在

DTSTART;TZID="Greenland (Danmarkshavn)":20120523T193000
DTEND;TZID="Greenland (Danmarkshavn)":20120524T000000

问题是,在线找到的常见解析器类只是剥离那些TZID参数,这导致将事件移动到字符串末尾的时间戳。

是否有任何解析器php照顾这个问题?

更新答案:

sabre/vobject有这样一个相当广泛的时区映射列表,以映射到它们的olson对应。完整列表在这里。

但是它看起来不像你找到的特定字符串。

符合标准的iCalendar对象实际上也应该包含一个VTIMEZONE对象,在VEVENT对象之上。VTIMEZONE对象中的信息可以帮助解析器(如vobject)找出预期的时区。

如果你在源代码中没有看到VTIMEZONE,这意味着你正在使用的群件服务器正在生成破碎的iCalendar文件。我建议提交一个bug。有许多生成iCalendar的应用程序不包含VTIMEZONE,但是这些应用程序倾向于使用广泛支持的Olson标识符(例如Europe/Amsterdam)。

你应该看看:http://www.phpclasses.org/browse/file/16660.html

根据这个线程,它处理PHP中支持时区的TZID: ICalendar解析器