首页 > 解决方案 > C# - 发送会议预约 - EN 客户的时间错误

问题描述

我正在根据数据库中的日期发送自动会议邀请。我正在使用此代码段来构建邀请文件:

private string BuildInvitationFile(MailMessage mail, DateTime fromDate, DateTime toDate)
    {
        StringBuilder str = new StringBuilder();
        str.AppendLine("BEGIN:VCALENDAR");
        str.AppendLine("PRODID:-//Schedule a Meeting");
        str.AppendLine("VERSION:2.0");
        str.AppendLine("METHOD:REQUEST");
        str.AppendLine("BEGIN:VEVENT");

        str.AppendLine(string.Format("DTSTART;VALUE=DATE:{0:yyyyMMdd}", fromDate));
        str.AppendLine(string.Format("DTEND;VALUE=DATE:{0:yyyyMMdd}", toDate.AddDays(1)));

        str.AppendLine("LOCATION: " + "");
        str.AppendLine(string.Format("UID:{0}", Guid.NewGuid()));
        str.AppendLine(string.Format("DESCRIPTION:{0}", mail.Body));
        str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", mail.Body));
        str.AppendLine(string.Format("SUMMARY:{0}", mail.Subject));
        str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", mail.From.Address));
        str.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE:mailto:{1}", mail.To[0].DisplayName, mail.To[0].Address));
        str.AppendLine("BEGIN:VALARM");
        str.AppendLine("TRIGGER:-PT15M");
        str.AppendLine("ACTION:DISPLAY");
        str.AppendLine("DESCRIPTION:Reminder");
        str.AppendLine("END:VALARM");
        str.AppendLine("END:VEVENT");
        str.AppendLine("END:VCALENDAR");

        return str.ToString();
    }

问题是,当此邀请发送给具有英文版 Outlook 客户端的收件人(我们在匈牙利 - CET)时,DTSTART 和 DTEND 都会增加 2 小时。感觉有点奇怪,因为我没有使用任何日期时间,只有日期,这些会议应该是“全天”会议。

标签: c#emailoutlookappointmentinvitation

解决方案


假设iCalendar 格式。DateTimes 应根据ISO 8601进行格式化。据我所知,以下内容应该是有效的:

fromDate.ToUniversalTime().ToString("yyyyMMddTHHmmssZ")

产生像这样的时间20201013T123616Z

“Z”后缀表示时间为通用时间。将由客户端将其转换为本地时区。


推荐阅读