【问题标题】:Recurring calender invitation was showing one hour off after DST startsDST 开始后一小时的定期日历邀请显示
【发布时间】:2015-02-26 23:02:42
【问题描述】:

我正在从我的 .net 应用程序 (C#) 发送一个请求,以在 Outlook 中创建定期会议邀请。 会议邀请显示在夏令时(2015 年 3 月 8 日至 2015 年 11 月 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

【问题讨论】:

  • 请展示邀请函的外观,并告诉我们 Outlook 认为您的时区是什么。我怀疑问题在于您指定了错误的时区。
  • 请查看带有屏幕的编辑版本
  • 这并没有显示 ical 信息的样子。我要的是您附加的邀请文本...请注意 Outlook 如何明确告诉您邀请指定 UTC...

标签: outlook sendmail icalendar dst vcalendar


【解决方案1】:

这就是问题所在:

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

您将开始和结束时间明确指定为 UTC,而您从未指定时区。

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

如果您希望该值是一个“浮动时间”,您可以不使用任何时区,无论本地时区是什么,都可以对其进行解释。

【讨论】:

  • 感谢您的解决方案,但我需要发送不同时区的邀请,请告诉我们如何将 DTzone 设置为本地
  • @Ddev:我已经编辑了我的答案 - 如果需要,您可以完全跳过时区规范,但您需要删除 Z... 并删除 ToUniversalTime 调用.
  • 我尝试过使用 TZID 并删除了 Z 和 ToUniversalTIme,但仍然邀请以不同的时间发送。供您参考,单次预订有效,我遇到的问题只有定期预订
  • @Ddev:好吧,“不同的时间”并不能告诉我们太多。您应该查看您发送的文本以及它在 Outlook 中的显示方式。如果您使用正确的本地时间发送它并且没有 TZID 或 Z,它应该是浮动的。
  • 嗨乔恩,我已经更新了我的问题,更加相关和具体。如果这有帮助,请告诉我。
猜你喜欢
  • 1970-01-01
  • 2018-03-06
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
相关资源
最近更新 更多