Проблема с часовым поясом iCal

Я пытаюсь разрешить пользователю загружать iCal для своего календаря в ASP.Net, но у меня проблема с часовым поясом.

Если я загружаю файл на свой компьютер, время отображается правильно и в правильные сроки. Тем не менее, когда я пытаюсь загрузить его на телефон, часовой пояс переключается, и он становится на 5 часов позже (или около 7:00 утра становится 3:00 утра).

Кто-нибудь знает, как решить эту проблему / установить часовой пояс?

Вот код:

        iCalendar iCal = new iCalendar();

        Event evt = iCal.Create<Event>();

        DateTime dt = (DateTime)Convert.ToDateTime(lblTicketDue.Text);

        Console.Write(dt);

        evt.Start = new iCalDateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second);
        evt.End = new iCalDateTime((DateTime)Convert.ToDateTime(lblTicketDue.Text).AddMinutes(15.0));
        Alarm alarm = new Alarm();
        alarm.Action = AlarmAction.Display;
        alarm.Summary = "Ticket due!";
        Trigger t = new Trigger();
        iCalDateTime icdt = new iCalDateTime(dt.Subtract(TimeSpan.FromMinutes(120.0)));
        t.DateTime = icdt;
        alarm.Trigger = t;


        evt.Alarms.Add(alarm);
        iCal.Events.Add(evt);

        iCalendarSerializer serializer = new iCalendarSerializer();
        string output = serializer.SerializeToString(iCal);

        Response.ContentType = "text/calendar";
        Response.Write(output);
        Response.End();

1 ответ

Решение

Трудно сказать, не глядя на фактический генерируемый поток iCalendar, но вполне вероятно, что вы генерируете DTSTART/DTEND, используя плавающее время (например, "20160517T070000"). Если событие не повторяется (без RRULE), вам нужно преобразовать дату и время в UTC и использовать формат "дата с временем UTC", описанный в https://tools.ietf.org/html/rfc5545 т.е. что-то вроде "20160517Txx0000Z"

Если событие повторяется, вам нужно будет использовать последнюю форму (дата с местным временем и указанием часового пояса).

Другие вопросы по тегам