我正在努力确保这是Outlook的问题。
我正在生成一个指定事件时区的ics文件:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:www.example.com
X-WR-TIMEZONE:America/Chicago
X-PUBLISHED-TTL:P1W
BEGIN:VEVENT
UID:56bba0729f450
DTSTART;TZID=America/Chicago:20160212T170000
SEQUENCE:0
TRANSP:OPAQUE
DTEND;TZID=America/Chicago:20160212T183000
SUMMARY:Beer-o-clock
CLASS:PUBLIC
DTSTAMP:20160210T144122Z
END:VEVENT
BEGIN:VTIMEZONE
TZID:America/Chicago
X-LIC-LOCATION:America/Chicago
BEGIN:DAYLIGHT
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
DTSTART:19701101T030000
RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
此邀请有效,但如果您在Outlook中以不同的时区打开它(例如,当我从太平洋时区打开它时,我会看到这个),它无法识别时区变化。时区更改 可被其他应用程序识别,例如mac os日历或Google日历。
当我重新排列日历文件以使VEVENT
定义位于VTIMEZONE
定义之后,它在outlook中起作用:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:www.example.com
X-WR-TIMEZONE:America/Chicago
X-PUBLISHED-TTL:P1W
BEGIN:VTIMEZONE
TZID:America/Chicago
X-LIC-LOCATION:America/Chicago
BEGIN:DAYLIGHT
TZNAME:CDT
TZOFFSETFROM:-0600
TZOFFSETTO:-0500
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZNAME:CST
TZOFFSETFROM:-0500
TZOFFSETTO:-0600
DTSTART:19701101T030000
RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
UID:56bba0729f450
DTSTART;TZID=America/Chicago:20160212T170000
SEQUENCE:0
TRANSP:OPAQUE
DTEND;TZID=America/Chicago:20160212T183000
SUMMARY:Beer-o-clock
CLASS:PUBLIC
DTSTAMP:20160210T144122Z
END:VEVENT
END:VCALENDAR
这似乎是前景中的解析错误但我不完全确定。我不知道我对生成ics文件的顺序有多少控制而不破解供应商代码(我希望不要这样做)。
这是一个特定于Outlook的事情,还是邀请定义还有其他问题?
答案 0 :(得分:0)
虽然您可能在RFC5545 / RFC5546中找不到任何声明VTIMEZONE组件必须在VEVENT之前出现的内容,但这些规范中给出的所有示例都按照该顺序排列,并且在VEVENT之前的做法显然是VTIMEZONE。 从iCalendar消费者方面来看,它也很有意义,因为VEVENT中引用了VTIMEZONE TZID。
不遵循惯例,你真的在寻找麻烦。假设您以其他方式解决Outlook问题,明天很可能会遇到与其他客户端的互操作问题。因此,您最好修复iCalendar流。
答案 1 :(得分:0)
The iCalendar specifications do not require you to put the <mso:button idQ="x1:Open_00_1_549FAC6" label="00" imageMso="BlackAndWhiteDontShow" onAction="Open_00" visible="true"/>
<mso:button idQ="x1:Open_01_10_549FAC6" label="01" imageMso="AppointmentColor0" onAction="Open_01" visible="true"/>
<mso:button idQ="x1:Open_02_9_549FAC6" label="02" imageMso="AppointmentColor1" onAction="Open_02" visible="true"/>
<mso:button idQ="x1:Open_03_8_549FAC6" label="03" imageMso="AppointmentColor2" onAction="Open_03" visible="true"/>
component at the top. But, of course, people are free to implement the spec however they choose.