ics 文件的 Outlook 时区问题。文件在 google 日历、MacOS 等中正常加载
Outlook timezone issues with an ics file. File loads OK in google calendar, MacOS etc
在 Outlook 中加载此文件显示事件开始于太平洋时间 1:30 上午而不是太平洋时间 0:30 上午(并且 9:30 上午 BST 而不是 8:30 上午 BST) .加载它 Google 日历按预期加载时间。
根据 timeanddate.com 以下是正确的时间:https://www.timeanddate.com/worldclock/converted.html?iso=20171019T0830&p1=136&p2=137&p3=0
知道这可能是什么原因吗?
该文件由 icalendar 2.0 (a ruby gem) 生成——我也很乐意为此提供代码。
BEGIN:VCALENDAR
VERSION:2.0
PRODID:icalendar-ruby
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:DAYLIGHT
DTSTART:19711031T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:GMT
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19681027T000000
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:BST
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:20170720T004211Z
UID:72e941fa-eb92-4740-b0b2-50cab1d6c536
DTSTART;TZID=Europe/London:20171019T083000
DTEND;TZID=Europe/London:20171019T190000
DESCRIPTION:Event description
LOCATION:London\, United Kingdom
SUMMARY:London ics test
END:VEVENT
END:VCALENDAR
编辑:
我修复了我的代码中的一个错误,该错误导致在设置时区之前开始日期为空。生成的 ics 文件如下:
我是否正确理解了 VTIMEZONE 日期的含义?
BEGIN:VCALENDAR
VERSION:2.0
PRODID:icalendar-ruby
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:DAYLIGHT
DTSTART:20170326T020000 <-- daylight savings start for THIS event's dates
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:BST
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:20171029T010000 <-- daylight savings end for THIS event's dates
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:GMT
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:20170720T171429Z
UID:5cfa170a-9df1-4a05-a2e1-050888f48e4b
DTSTART;TZID=Europe/London:20171019T083000 <-- TZID ignored by outlook but used by apple and google calendars... I presume they have daytime savings info built in?
DTEND;TZID=Europe/London:20171019T190000 -- Outlook takes the date part and calculates offset based on the timezone section?
DESCRIPTION:Event description
LOCATION:London\, United Kingdom
SUMMARY:London ics test
END:VEVENT
END:VCALENDAR
你从哪里得到这个 VTIMEZONE 定义的?这完全是假的:DAYLIGHT 和 STANDARD 切换都在 10 月进行,TZOFFSETFROM/TZOFFSETTO 在 STANDARD 的情况下具有相同的值。
与忽略 VTIMEZONE 并仅依赖于已知的 TZID 的其他客户端不同,Outlook 确实关心(也是因为它不使用相同的 TZID 值)。
试试类似的东西:
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19700329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19701025T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE
在 Outlook 中加载此文件显示事件开始于太平洋时间 1:30 上午而不是太平洋时间 0:30 上午(并且 9:30 上午 BST 而不是 8:30 上午 BST) .加载它 Google 日历按预期加载时间。
根据 timeanddate.com 以下是正确的时间:https://www.timeanddate.com/worldclock/converted.html?iso=20171019T0830&p1=136&p2=137&p3=0
知道这可能是什么原因吗?
该文件由 icalendar 2.0 (a ruby gem) 生成——我也很乐意为此提供代码。
BEGIN:VCALENDAR
VERSION:2.0
PRODID:icalendar-ruby
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:DAYLIGHT
DTSTART:19711031T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:GMT
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:19681027T000000
TZOFFSETFROM:+0100
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:BST
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:20170720T004211Z
UID:72e941fa-eb92-4740-b0b2-50cab1d6c536
DTSTART;TZID=Europe/London:20171019T083000
DTEND;TZID=Europe/London:20171019T190000
DESCRIPTION:Event description
LOCATION:London\, United Kingdom
SUMMARY:London ics test
END:VEVENT
END:VCALENDAR
编辑:
我修复了我的代码中的一个错误,该错误导致在设置时区之前开始日期为空。生成的 ics 文件如下:
我是否正确理解了 VTIMEZONE 日期的含义?
BEGIN:VCALENDAR
VERSION:2.0
PRODID:icalendar-ruby
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:DAYLIGHT
DTSTART:20170326T020000 <-- daylight savings start for THIS event's dates
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:BST
END:DAYLIGHT
BEGIN:STANDARD
DTSTART:20171029T010000 <-- daylight savings end for THIS event's dates
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:GMT
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTAMP:20170720T171429Z
UID:5cfa170a-9df1-4a05-a2e1-050888f48e4b
DTSTART;TZID=Europe/London:20171019T083000 <-- TZID ignored by outlook but used by apple and google calendars... I presume they have daytime savings info built in?
DTEND;TZID=Europe/London:20171019T190000 -- Outlook takes the date part and calculates offset based on the timezone section?
DESCRIPTION:Event description
LOCATION:London\, United Kingdom
SUMMARY:London ics test
END:VEVENT
END:VCALENDAR
你从哪里得到这个 VTIMEZONE 定义的?这完全是假的:DAYLIGHT 和 STANDARD 切换都在 10 月进行,TZOFFSETFROM/TZOFFSETTO 在 STANDARD 的情况下具有相同的值。
与忽略 VTIMEZONE 并仅依赖于已知的 TZID 的其他客户端不同,Outlook 确实关心(也是因为它不使用相同的 TZID 值)。
试试类似的东西:
BEGIN:VTIMEZONE
TZID:Europe/London
BEGIN:DAYLIGHT
TZOFFSETFROM:+0000
TZOFFSETTO:+0100
TZNAME:BST
DTSTART:19700329T010000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0100
TZOFFSETTO:+0000
TZNAME:GMT
DTSTART:19701025T020000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
END:VTIMEZONE