2016-05-16 87 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