【问题标题】:Is There a Workaround for lack of Olsen TZ TZID Format in ICS FileICS 文件中缺少 Olsen TZ TZID 格式是否有解决方法
【发布时间】:2011-11-18 04:40:16
【问题描述】:

我最近遇到了通过电子邮件收到的 ICS 文件的问题。我的 Outlook 2010 副本无法正确识别时区。以下是 ICS 文件中会议开始时间的表示方式:

DTSTART;TZID=America/Los_Angeles:20110928T183000

当 Outlook 导入此文件时,它会将时间从太平洋时间下午 6:30 更改为太平洋时间下午 7:30。经过一些实验后,我能够通过更改时区格式获得在 Outlook 中正确导入的 ICS 文件:

DTSTART;TZID="Pacific Time":20110928T183000

经过进一步研究,我发现ICS file specification 留下了时区识别问题,但建议使用the Olsen TZ database。 Microsoft Outlook 团队似乎选择忽略此建议。

鉴于 Outlook 是一种相当流行的日历客户端,是否有一种可靠的方法可以为 Outlook 格式化 ICS 时区,并且仍然与其他客户端兼容?我对此问题最大的担忧是 Outlook 导入期间的静默错误。用户很容易在错误的时间出现在会议上,因为 Outlook 不会发出关于时区混淆的警告。我们是否应该简单地将 Outlook 用户引导到不同的文件格式?

注意:我知道这个问题与an earlier post 类似,但该帖子上的引用似乎已过期,我想知道是否有更好的解决方案。

【问题讨论】:

标签: outlook timezone icalendar


【解决方案1】:

如果没有完整的 iCalendar 文件,很难判断,但您是否在日历文件中定义/是否有一个 VTIMEZONE 组件来定义 America/Los_Angeles 应该是什么?

类似:

BEGIN:VTIMEZONE
TZID:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
TZNAME:PDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
TZNAME:PST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE

【讨论】:

  • Egads!那行得通!注意:确保在结束 END:VCALENDAR 标记之前获取 VTIMEZONE 定义。谢谢@oberron!
【解决方案2】:

与其将时区定义添加到 ics 文件中,不如在 UTC 本身中提及事件开始/结束时间。 然后,ICS 文件的使用者(在您的情况下为 Outlook)应该能够在将会议事件呈现在他们的日历上之前,将时区从 UTC(从 ics 文件)转换为最终用户的首选时区设置。

优点: 这样您就不必自己添加正确的时区偏移量(VTIMEZONE 组件)。 此外,ics 文件更小、更清晰、更易于阅读。

参考资料: 甚至谷歌似乎也在以这种方式处理 ics 中的时区 - Google timezone handling

希望这会有所帮助。

【讨论】:

  • 缺点:不能正确处理目标时区的夏令时变化。
【解决方案3】:

假设提问者住在洛杉矶并使用 OUTLOOK2010。 而20110928T183000 开始时间是基于PDT 如果您想让会议成功,您可以在描述中添加会议约会项目、联系人和谷歌地图 URL 地址电话开放时间。 当然,会议项目应该添加Organizer和Attendee,但是设置起来太难了。 大约 75 个八位字节的回车和插入空格很困难。所以只设置组织者和参加者在描述中写。

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN
VERSION:2.0
CALSCALE:GREGORIAN
X-WR-TIMEZONE:America/Los_Angeles
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
X-WR-TIMEZONE:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
TZNAME:PDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
TZNAME:PST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=America/Los_Angeles:20110928T183000
DTEND;TZID=America/Los_Angeles:20110928T203000
LOCATION:meeting room in Los Angeles
Description:maps link \nhttp... \n phone \n open at 10:00:AM(PDT)
UID:ev1
ORGANIZER;CN="ThisMeeting Orginizer":mailto:meetingorginer@example.com
Contact:meetingsupport@example.com
DTSTAMP:20111001T105433Z
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

【讨论】:

    猜你喜欢
    • 2010-09-22
    • 1970-01-01
    • 2023-04-04
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2011-05-07
    • 1970-01-01
    相关资源
    最近更新 更多