2010-03-23 3 views
1

J'utilise le calendrier du jour J et je ne suis pas sûr mais j'ai eu un problème étrange.Calendrier D-Day a de mauvaises dates lors de l'importation à partir de Google Agenda?

J'ai essentiellement cela pour mon code

iCalendar iCal = iCalendar.LoadFromStream(file.InputStream); 
foreach (Event evt in iCal.Events) 
       { 
        DateTime start = evt.DTStart.Date; 
        DateTime end = evt.DTEnd.Date; 
        // loop through it and get values. 
       } 

Pourtant, quand j'importer un calendrier de calendrier Google la date de fin est foiré sur certaines des choses que je suis importateur.

Comme par exemple, j'ai cette

Titre: ne doit pas montrer Quand: Dim 21 Mars (toute la journée).

Pourtant, quand je l'importer dans. Je dis que la date de début est le 21ème mais la date de fin est le 22ème quand il devrait être le 21ème.

Vous ne savez pas exactement ce qui se passe.

Je ne sais pas vraiment quelles autres informations je peux vous donner.

J'ai créé une application de ligne cmd et y ai placé le fichier .ics. Si quelqu'un connaît un bon endroit, je peux le télécharger et vous pouvez voir ce que je veux dire.

C'est ce que ma ligne cmd produit.

Start Date Of this Record 
Some one day task 3/25/2010 12:00:00 AM 
End Date of this Record 3/26/2010 12:00:00 AM 


Start Date Of this Record 
Test using quick create(bubble that shows up when clicked on date box) - 1 day t 
ask 3/21/2010 12:00:00 AM 
End Date of this Record 3/22/2010 12:00:00 AM 


Start Date Of this Record 
Spans 2 days 3/30/2010 12:00:00 AM 
End Date of this Record 4/1/2010 12:00:00 AM 

Répondre

1

Si c'est un événement d'une journée, je crois que le temps final sera 00:00:00 le lendemain, alias 12:00:00 AM. N'est-ce pas ce que vous voyez pour l'époque?

Le dernier exemple que vous donnez réellement s'étend sur deux jours (mars a 31 jours), et est correct. La sortie que vous voyez jives avec la définition d'un événement toute la journée. Il commence à 00h00 et se termine à 00h00 le lendemain.

Si vous voulez des événements toute la journée pour rester uniquement sur le truely même jour, vous pouvez faire une vérification comme:

if (((end - start) == TimeSpan.FromDays(1.0)) 
    && (start.Hour == 0 && start.Minute == 0)) 
{ 
    end = end - TimeSpan.FromSeconds(1.0); // now 23:59:59 same day as start 
} 
+0

Non, il est simplement défini comme 12:00:00 (voir mon édition pour la sortie). – chobo2

+0

C'est la même chose que 00:00:00 si vous n'incluez pas les informations AM/PM. – user7116

+0

Oh. Donc, ce que la norme ics veut ou quelque chose que je trouve juste si bizarre.Pour mon calendrier quand quelqu'un a mis tous les jours, j'ai fait de 12h00 à 23h30 (ils peuvent seulement choisir par incréments d'une demi-heure). – chobo2

1

Chobo,

Si vous essayez de créer des événements tous les jours dans DDay.iCal c'est vraiment simple:

event.IsAllDay = true; 

Est-ce ce que vous essayez d'accomplir? En toute honnêteté, votre problème n'est pas si clair que ce que vous nous avez déjà dit.

Merci, -Doug

+0

Vous avez semblé le comprendre sur l'autre forum lol. – chobo2

0

Vous devez définir la même date de début et de fin et propriétés IsAllDay = true:

var evt = iCal.Create<DDay.iCal.Event>(); 
evt.Start = new iCalDateTime(myEvent.Date); 
evt.End = new iCalDateTime(myEvent.Date); 
evt.IsAllDay = true; 

propriété Sinon IsAllDay ne fonctionne pas comme prévu. S'il vous plaît vérifier la mise en œuvre de cette propriété:

virtual public bool IsAllDay 
     { 
      get { return !Start.HasTime; } 
      set 
      { 
       // Set whether or not the start date/time 
       // has a time value. 
       if (Start != null) 
        Start.HasTime = !value; 
       if (End != null) 
        End.HasTime = !value; 

       if (value && 
        Start != null && 
        End != null && 
        object.Equals(Start.Date, End.Date)) 
       { 
        Duration = default(TimeSpan); 
        End = Start.AddDays(1); 
       } 
      } 
     } 
Questions connexes