2017-01-05 2 views
0

Ich erstelle ein .ics Dokument mit iCal.Net.Warum generiert iCal.Net eine ungültige Zeit?

Event calendarEvent = new Event 
{ 
    IsAllDay = false, 
    Summary = "summary", 
    Description = "summary", 
    DtStart = new CalDateTime(TimeZoneInfo.ConvertTimeFromUtc(start,TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")), "America/New_York"), 
    DtEnd = new CalDateTime(TimeZoneInfo.ConvertTimeFromUtc(end, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")), "America/New_York") 
}; 

var calendar = new Calendar(); 
calendar.AddTimeZone(new VTimeZone("America/New_York")); 
calendar.Events.Add(calendarEvent); 

var serializer = new CalendarSerializer(new SerializationContext()); 
return serializer.SerializeToString(calendar); 

Üblicherweise wird der resultierende Start- und Enddatum ähnlich aussehen wie diese:

DTEND;TZID=America/New_York:20170106T132000 
DTSTAMP:20170104T005548Z 
DTSTART;TZID=America/New_York:20170106T130000 

Sie werden jedoch wie dies gelegentlich generiert:

DTEND;TZID=America/New_York:20180105T002000 
DTSTAMP:20170105T191635Z 
DTSTART;TZID=America/New_York;VALUE=DATE:20180105 

Insbesondere beachten Sie die VALUE=DATE:20180105 nächste zu DTSTART. Aus welchem ​​Grund auch immer, dies bewirkt, dass die meisten Kalenderanwendungen das Ereignis als ganztägiges Ereignis lesen (obwohl, wie Sie oben sehen können, ich ausdrücklich sage, dass dies nicht der Fall ist).

Was ist los?

EDIT:

Die Startdaten sind 1. Juni 2017, 01.00 Uhr für das erste Beispiel, und 1. Mai 2018, 00.00 Uhr für die zweiten. Ich denke, dass es etwas mit der Tatsache zu tun, dass in der zweiten Datumzeit, die Zeit ist der Standardwert

+0

Nun, was ist der Wert von "Start" in diesen Fällen? –

+0

Sorry, hinzugefügt, dass Informationen zu der Problemstellung –

Antwort

1

Offenbar seit date + 12AM 0 Ticks nach date nimmt iCal.net, dass Sie date beziehen (ohne Zeit) wenn Sie eine Instanz von CalDateTime erstellen.

Wenn Sie bei den Objekteigenschaften suchen auf new CalDateTime(TimeZoneInfo.ConvertTimeFromUtc(start,TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")), "America/New_York") wo start bei 00.00, können Sie sehen, dass HasTimefalse ist.

Glücklicherweise ist diese Eigenschaft get; set;. Setzen Sie es einfach auf true, und das Problem verschwindet.

Verwandte Themen