C # — Отправка назначения встречи — неправильное время на EN-клиентах

#c# #email #outlook #appointment #invitation

#c# #Адрес электронной почты #outlook #назначение #приглашение

Вопрос:

Я отправляю автоматические приглашения на собрания на основе дат в базе данных A.Я использую этот фрагмент для создания файла приглашения:

 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 часа. Немного странно, поскольку я не использую какое-либо время, только дату, и эти собрания должны быть собраниями «Весь день».

Ответ №1:

Предполагается формат iCalendar. Даты и время должны быть отформатированы в соответствии с ISO 8601. Из того, что я могу сказать, должно быть действительным следующее:

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

создание времени, подобного 20201013T123616Z

Постфикс «Z» указывает, что время указано по всемирному времени. Клиент должен преобразовать его в местный часовой пояс.