我有一个用户试图导入Outlook for Mac 2011的ics文件。
BEGIN:VCALENDAR
VERSION:2.0
PRODID:anonymized
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:Europe/Prague
BEGIN:DAYLIGHT
DTSTART:20140330T030000
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;BYDAY=5SU;BYMONTH=3
TZNAME:CEST
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:20141026T020000
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYDAY=4SU;BYMONTH=10
TZNAME:CET
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:20140807T001736Z
UID:12345
DTSTART;TZID=Europe/Prague:20140808T090000
DTEND;TZID=Europe/Prague:20140808T100000
CREATED:20140805T162858Z
LAST-MODIFIED:20140806T052758Z
SEQUENCE:0
STATUS:confirmed
SUMMARY:My event for which everyone with Outlook will be an hour late to
END:VEVENT
END:VCALENDAR
其他所有日历程序都会在布拉格上午9:00显示此事件,但Outlook会在上午10:00显示该事件。看来Outlook正在使用STANDARD
中的VTIMEZONE
块来计算时间并且从不应用DST偏移量。我认为,因为完全删除STANDARD
块或将TZOFFSETTO
块中的STANDARD
更改为+0200
会导致事件在正确的时间显示。
这两个显然都不是首发,因为它们会破坏地球上所有其他日历应用程序。
我是否遗漏了有关为Outlook消费指定时区的内容?
答案 0 :(得分:1)
Outlook无法处理示例时区中DAYLIGHT
块的重复规则。
将VTIMEZONE
定义更改为:
BEGIN:VTIMEZONE
TZID:Europe/Prague
BEGIN:DAYLIGHT
DTSTART:20140330T030000
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:CEST
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:20141026T020000
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:CET
END:STANDARD
END:VTIMEZONE
允许Outlook正确显示该事件。
唯一的变化是将RRULE
两个定义都更改为BYDAY=-1SU
。这有双重好处,允许Outlook解析它,并且比5SU
/ 4SU
更加正确地扩展CEST / CET转换规则。
答案 1 :(得分:0)
您是否检查过Outlook中的时区设置。它可能会显示您从其他时区看到的事件。 另一种检查方法是打赌从outlook创建一个事件并将其导出到ic,以查看它用于该事件的时区。