2016-05-16 84 views
1

我想让用户在ASP.Net中下载他们的日历的iCal,但我有一个时区问题。iCal时区问题

如果我在计算机上下载该文件,则时间显示正确并且在正确的时间范围内。但是,当我尝试在手机上下载时,时区会切换,并且会变为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

很难说没有看获取生成实际的iCalendar流,但它很可能是您正在生成您的DTSTART/DTEND使用浮动时间(例如“20160517T070000” )。 如果事件没有反复出现(不RRULE),你想要做什么是你的日期时间转换为UTC,并使用“日期与UTC时间”格式https://tools.ietf.org/html/rfc5545#section-3.3.5 即类似“20160517Txx0000Z”

如果事件描述经常性的,你将需要使用最后的形式(具有本地时间和时区参考的日期)。

+0

iayale的DDay对象版本不是做事的首选方式吗?我应该写信给流吗? – Jestus

+0

我对这个特定的API并不熟悉,但是如果它不允许您按照上面所述进行操作,我会感到非常惊讶。 – arnaudq