Проблема с часовым поясом 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"
Если событие повторяется, вам нужно будет использовать последнюю форму (дата с местным временем и указанием часового пояса).