在一个文件中摆脱/处理时区的好方法?

时间:2014-07-03 08:17:30

标签: php timezone icalendar rfc5545

我试图从使用php解析的群件服务器(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是否有任何解析器可以解决这个问题?

2 个答案:

答案 0 :(得分:0)

更新回答:

sabre/vobject有一个非常广泛的时区映射列表,可以映射到他们的olson对应物。完整列表here

但它看起来并不像你发现的特定字符串。

符合标准的iCalendar对象实际上还应包含一个VTIMEZONE对象,位于VEVENT对象之上。 VTIMEZONE对象中的信息有助于vobject等解析器找出预期的时区。

如果您未在源中的任何位置看到VTIMEZONE,则表示您正在使用的群件服务器正在生成损坏的iCalendar文件。我建议提交一个暗示这个的错误。有许多应用程序生成不包含VTIMEZONE的iCalendar,但这些应用程序倾向于使用非常广泛支持的Olson标识符(例如Europe/Amsterdam)。

答案 1 :(得分:-1)