2016-05-16 2 views
1

J'essaie de permettre à un utilisateur de télécharger un calendrier iCal pour ASP.Net, mais j'ai un problème de fuseau horaire.Problème de fuseau horaire iCal

Si je télécharge le fichier sur mon ordinateur, l'heure apparaît correcte et dans les délais corrects. Cependant, quand j'essaye de le télécharger sur un téléphone, le fuseau horaire change et il devient 5 heures de retard (aka 7:00 AM devient 3:00 AM).

Est-ce que quelqu'un sait comment résoudre ce problème/définir le fuseau horaire?

Voici le code:

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

Répondre

1

Difficile à dire sans regarder le flux iCalendar réel qui obtient généré, mais il est fort probable que vous générez votre DTSTART/DTEND en utilisant le temps flottant (par exemple « 20160517T070000 »). Si l'événement ne récurrent (pas RRULE), ce que vous voulez faire est de convertir votre datetime en UTC et utiliser le format « date avec l'heure UTC » décrit dans https://tools.ietf.org/html/rfc5545#section-3.3.5 -à-dire quelque chose comme « 20160517Txx0000Z »

Si l'événement est récurrent, vous devrez alors utiliser le dernier formulaire (date avec référence heure locale et fuseau horaire).

+0

La version d'objet DDay d'iCalendar n'est-elle pas la méthode de prédilection? Dois-je écrire dans le flux à la place? – Jestus

+0

Je ne suis pas familier avec cette API particulière, mais je serais très surpris si cela ne vous permet pas de faire ce que j'ai décrit ci-dessus. – arnaudq