Я использую iCal для генерации прогноза. Приглашающие встречи приглашаются с портала. На портале у нас разные часовые пояса. Мы конвертируем все время в IST и выполняем операцию. и мой код выглядит следующим образом. Проблема, с которой я сталкиваюсь, заключается в том, что для пользователя paris создается повторяющийся запрос, половина приглашений показывает правильное время, но оставшиеся повторяющиеся приглашения, которые падают после DST (дневное свечение), показывают за 1 час до времени в календаре, в идеале они должны быть одинаковыми для них независимо от летнего времени. Как обращаться с DST, поскольку есть несколько часовых поясов, которые имеют для них отличный DST. Вы можете видеть в моем коде, у меня есть pass dtParentStime и dtParentEtime, время начала и окончания приглашения родителя в IST.Icalendar DST issue
str.AppendLine("BEGIN:VCALENDAR");
str.AppendLine("VERSION:2.0");
str.AppendLine("METHOD:REQUEST");
str.AppendLine("BEGIN:VTIMEZONE");
str.AppendLine("TZID:Asia/Kolkata");
str.AppendLine("BEGIN:STANDARD");
str.AppendLine("TZOFFSETFROM:+0530");
str.AppendLine("TZOFFSETTO:+0530");
str.AppendLine("TZNAME:IST");
str.AppendLine("END:STANDARD");
str.AppendLine("END:VTIMEZONE");
str.AppendLine("BEGIN:VEVENT");
str.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmss}", dtParentStime)); //dtParentStime is the the parent request's start time in IST
str.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", DateTime.UtcNow));
str.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmss}", dtParentEtime)); //dtParentEtime is the parent request's end time in IST
str.AppendLine(string.Format("RRULE:FREQ=WEEKLY;UNTIL={0:yyyyMMddTHHmmssZ}", utcEtime));
str.AppendLine("LOCATION: ");
str.AppendLine(string.Format("UID:{0}", meetingID));
str.AppendLine(string.Format("DESCRIPTION:{0}", msg.Body));
str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", msg.Body));
str.AppendLine(string.Format("SUMMARY:{0}", msg.Subject));
str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", msg.From.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");
System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType("text/calendar");
ct.Parameters.Add("method", "REQUEST");
AlternateView avCal = AlternateView.CreateAlternateViewFromString(str.ToString(), ct);
msg.AlternateViews.Add(avCal);
sc.Send(msg);
Я также пробовал пропустить время UTC для начала и окончания времени и удалить разделы vtimezone в приведенном выше коде. но проблема усугубляется. поскольку приглашение 10AM предлагается в 8 утра, а после dst оно появляется в 7 утра для пользователей часовых поясов CET.
Примечание: - если я использую время UTC для даты начала и окончания с разделом vtimezone, удаленным для единственного приглашения (приглашение без повторения), тогда время календаря будет правильным до DST и после DST. Есть что-то, чего мне не хватает, чтобы добавить в RRULE?
Привет выше решение не работал, я применил ВВ и удаленное vtimezone линию. но это заставило приглашение появиться за 2 часа до того, как приглашение 10AM появлялось в 8 утра, а после DST оно появлялось в 7 утра для часовой пояс CET. – Chandikumar
Для единственного приглашения (не повторяющегося) ваше предложение работает нормально. но для повторяющейся проблемы встречи это же, их проблема с RRULE? – Chandikumar