public static void FixTimeZoneDSTRRules (TimeZoneInfo tz, ITimeZone iCalTz)
{
var adjustments = tz.GetAdjustmentRules();
foreach (var tziItems in iCalTz.TimeZoneInfos)
{
var matchingAdj = adjustments.FirstOrDefault(a => (a.DateStart.Year == tziItems.Start.Year)) ?? adjustments.FirstOrDefault();
if (matchingAdj != null)
{
if ((matchingAdj.DateEnd.Year != 9999) && !(tziItems.Name.Equals("STANDARD") && matchingAdj == adjustments.Last()))
{
tziItems.RecurrenceRules[0].Until =
DateTime.SpecifyKind(matchingAdj.DateEnd.Date.AddDays(1).Subtract(tz.BaseUtcOffset), DateTimeKind.Utc);
}
if (tziItems.Name.Equals("STANDARD"))
{
if (!matchingAdj.DaylightTransitionEnd.IsFixedDateRule)
{
var startYear = tziItems.Start.Year;
tziItems.Start = CalcTransitionStart(matchingAdj.DaylightTransitionEnd, startYear);
}
}
else
{
if (!matchingAdj.DaylightTransitionStart.IsFixedDateRule)
{
var startYear = tziItems.Start.Year;
tziItems.Start = CalcTransitionStart(matchingAdj.DaylightTransitionStart, startYear);
}
}
}
}
}