iCal 时区问题

iCal Time Zone issue

我试图让用户在 ASP.Net 中为他们的日历下载 iCal,但我遇到了时区问题。

如果我在我的计算机上下载文件,时间显示正确并且在正确的时间范围内。然而,当我尝试在 phone 上下载它时,时区切换并且它变得落后 5 小时(又名 7:00 AM 变成 3:00 AM)。

有谁知道如何解决这个 issue/set 时区问题?

代码如下:

        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();

如果不查看生成的实际 iCalendar 流就很难判断,但很可能您正在使用浮动时间(例如“20160517T070000”)生成 DTSTART/DTEND。 如果事件不重复发生(无 RRULE),您要做的是将日期时间转换为 UTC 并使用 https://www.rfc-editor.org/rfc/rfc5545#section-3.3.5 中描述的“带 UTC 时间的日期”格式 即类似于“20160517Txx0000Z”

如果事件重复发生,则您需要使用最后一个表格(具有本地时间和时区参考的日期)。