我有一个ics文件,用户试图导入Outlook for Mac 2011。
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点显示此事件,但Outlook在上午10点显示它。看起来Outlook正在使用VTIMEZONE
中的STANDARD
块来计算时间,而从未应用DST偏移量。我认为,因为完全删除STANDARD
块或将STANDARD
块内的TZOFFSETTO
更改为+0200
,导致事件在正确的时间显示。
这两个显然都是不可能的,因为它们会破坏地球上所有其他日历应用程序。
我是否错过了为Outlook指定时区的内容?
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转换的规则。
您是否检查了Outlook中的时区设置?它可能显示从另一个时区看到的事件。另一种检查方法是从outlook创建一个事件并将其导出到ics,以查看该事件使用的时区。