2016-05-16 2 views
1

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

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

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

Вот код:

 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

Трудно сказать, не глядя на фактический поток Анонсы который получает генерируется, но вполне вероятно, что вы создаете свой DTSTART/DTEND с использованием плавающей времени (например, «20160517T070000»). Если событие не повторяющимися (не RRULE), что вы хотите сделать, это преобразовать DateTime в формате UTC и использовать «дата с временем по Гринвичу» формат, описанный в https://tools.ietf.org/html/rfc5545#section-3.3.5 т.е. что-то вроде «20160517Txx0000Z»

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

+0

Является ли версия объекта iCalendar объектом DDay не предпочтительным способом? Должен ли я писать в поток вместо этого? – Jestus

+0

Я не знаком с этим конкретным API, но я был бы очень удивлен, если бы он не позволял вам делать то, что я описал выше. – arnaudq