【问题标题】:Good way to get rid of / deal with timezones in a ical file?摆脱/处理 ical 文件中的时区的好方法?
【发布时间】:2014-08-24 06:24:58
【问题描述】:

我正在尝试从使用 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 解析器来处理这个问题?

【问题讨论】:

  • 刚刚完全删除时区并手动转换。厌倦了没有合适的解决方案。感谢大家至少尝试!

标签: php timezone icalendar rfc5545


【解决方案1】:

【讨论】:

    【解决方案2】:

    更新答案:

    sabre/vobject 有一个相当广泛的时区映射列表,像这样,映射到他们的 olson 对应物。完整列表here

    但看起来你找到的特定字符串不在其中。

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

    如果您在源代码中的任何位置都没有看到VTIMEZONE,这意味着您正在使用的组件服务器正在生成损坏的 iCalendar 文件。我建议提交一个建议这个的错误。有许多生成 iCalendar 的应用程序不包含 VTIMEZONE,但这些应用程序倾向于使用受到广泛支持的 Olson 标识符(例如 Europe/Amsterdam)。

    【讨论】:

    • 嗯,这些城市都在同一个时区。所以 id 很时髦,但我认为它没有任何问题(只要有一个对应的 VTIMEZONE 具有相同的时髦 id)。
    • @arnaudq:出于某种原因,我认为布拉格在右边一小时 :( 我很笨
    猜你喜欢
    • 2016-11-17
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2016-08-24
    • 2016-06-05
    相关资源
    最近更新 更多