Outlook时区问题与ics文件。在谷歌日历,MacOS等文件加载确定
在Outlook中加载此文件显示事件从凌晨1:30 PT开始,而不是0:30 AM PT(和上午9:30 AM BST而不是上午8:30 AM BST)。在Google日历中加载它会按预期加载时间。Outlook时区问题与ics文件。在谷歌日历,MacOS等文件加载确定
这里是正确的时间根据timeanddate.com:https://www.timeanddate.com/worldclock/converted.html?iso=20171019T0830&p1=136&p2=137&p3=0
任何想法可能是什么原因呢?
该文件由icalendar 2.0(一个红宝石宝石)生成 - 我很乐意为它提供代码。
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
@amaudq,谢谢。我在代码中发现了一个错误,我在分配时区之前传递了一个零开始日期。你能否指点我可以找到关于时区定义结构及其与事件开始和结束日期关系的资源?我是否正确地推测Outlook将采用时区定义(包括开始和结束的白天节省),并计算事件日期的当前偏移量?我用更新的ICS内容编辑了我的问题。 – aaandre
你不应该尝试自己制作VTIMEZONE信息。事件开始/结束日期和vtimezone定义之间的关系为零。 VTIMEZONE内容由当地法规驱动。你的红宝石可能带有一组预定义的VTIMEZONE定义,如果你必须处理多个时区,这就是你应该使用的。你用我提供给你的那个尝试了吗? – arnaudq
您不必担心,但自从您提问以来:这些时区大部分都是从https://www.iana.org/time-zones生成的,然后使用https://工具中描述的VTIMEZONE格式进行翻译.ietf.org/html/rfc5545#section-3.6.5 – arnaudq