Я разместил на форумах библиотеку DDay iCal, но решил опубликовать ее здесь на случай, если кто-нибудь столкнется с такой ситуацией. Из моего сообщения на форуме:
Я столкнулся с ошибкой, возникающей при создании раздела о часовом поясе в файле iCal. При добавлении часового пояса, не поддерживающего переход на летнее время, создается пустой раздел VTIMEZONE, который нарушает работу iCal. Беглый взгляд на код заставляет меня поверить, что секция генерируется коллекцией, возвращаемой TimeZoneInfo.GetAdjustmentRules (), которая пуста для часовых поясов, не наблюдающих летнее время.
Код в нижней части поста должен продемонстрировать эту проблему.
Если это не ошибка (и я не уверен, что это так!), Я был бы очень признателен за рекомендации, как заставить их работать.
void Main()
{
foreach (var tz in TimeZoneInfo.GetSystemTimeZones())
{
var cal = GetCal(tz);
Console.WriteLine(tz.Id + " :: " + tz.SupportsDaylightSavingTime + " :: " + cal.TimeZones.First().ID);
}
}
iCalendar GetCal(TimeZoneInfo timeZone)
{
var calendar = new iCalendar();
calendar.AddChild(iCalTimeZone.FromSystemTimeZone(timeZone));
var @event = new Event
{
Name = "VEVENT",
DTStart = new iCalDateTime(DateTime.Now, timeZone.Id),
DTEnd = new iCalDateTime(DateTime.Now + TimeSpan.FromHours(1))
};
calendar.Events.Add(@event);
return calendar;
}