DST开始后,重复的日历邀请显示一小时

时间:2014-12-30 19:20:29

标签: outlook sendmail icalendar dst vcalendar

我正在从我的.net应用程序(C#)发送请求,以在Outlook中创建定期会议邀请。 会议邀请在白天节电期间显示一小时(2015年3月8日至2015年1月1日)。

剩余时间,我的日历显示正确的时间,我将下面的代码发送到Outlook日历。

请注意我的申请来源使用EST和目的地到所有时区。

相同的代码。

BEGIN:VCALENDAR
PRODID:-//Schedule a Meeting
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
DTSTART:20150221T120000Z
DTEND:20150221T123000Z
LOCATION:XYZ, ABC
UID:0c5c9c55-851f-462b-bdf2-48df5991561b
DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Test for UTC Time Zone
SUMMARY:Test for UTC Time Zone
ORGANIZER:MAILTO:myapplication@gmail.com
ATTENDEE;CN="";RSVP=TRUE:mailto:sender@gmail.com.com
RRULE:FREQ=Monthly;COUNT=4;BYDAY=3SA
BEGIN:VALARM
TRIGGER:-PT15M
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR

1 个答案:

答案 0 :(得分:1)

这是问题所在:

DTSTART: starttime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z")
DTEND: Endtime.ToUniversalTime().ToString("yyyyMMdd\\THHmmss\\Z")

您明确指定UTC的开始和结束时间,并且您从不指定时区。

如果您希望事件在时区,则应指定本地时间而不是UTC时间(因此最后没有Z)和TZID属性指定时区。我建议您将一些现有事件导出为ical条目,以查看它们的外观。

如果您想让它成为“浮动时间”,您可以保留没有任何时区的值,无论当地时区是什么,它都会被解释。