public TimeZoneOffsetComponent(TimeZoneOffsetType timeZoneType, TimeZoneInfo timeZone) : base(ComponentType.TimeZone, timeZoneType.GetDescription()) { StartDate = new DateTime(1970, 1, 1, 0, 0, 0); TimeZoneInfo = timeZone; TimeZoneType = timeZoneType; OffsetWinter = TimeZoneInfo.GetUtcOffset(new DateTime(DateTime.Today.Year, 1, 1)); OffsetSummer = TimeZoneInfo.GetUtcOffset(new DateTime(DateTime.Today.Year, 6, 1)); OffsetFrom = TimeZoneType == TimeZoneOffsetType.Standard ? OffsetSummer : OffsetWinter; OffsetTo = TimeZoneType == TimeZoneOffsetType.Standard ? OffsetWinter : OffsetSummer; if (!timeZone.SupportsDaylightSavingTime) { return; } List <RecurranceValue> items = new List <RecurranceValue>(); foreach (var rule in timeZone.GetAdjustmentRules()) { if (DateTime.Today.Year < rule.DateStart.Year || DateTime.Today.Year > rule.DateEnd.Year) { continue; } TimeZoneInfo.TransitionTime transition = timeZoneType == TimeZoneOffsetType.Daylight ? rule.DaylightTransitionStart : rule.DaylightTransitionEnd; items.Add(new RecurranceValue(RecurrencePrefix.Month, transition.Month)); if (transition.IsFixedDateRule) { items.Add(new RecurranceValue(RecurrencePrefix.MonthDay, transition.Day)); } else { int weekNumber = (WeekOfMonth)transition.Week == WeekOfMonth.Last ? -1 : transition.Week; RecurrenceDayOfWeek recurrenceDay = (RecurrenceDayOfWeek)(int)transition.DayOfWeek; items.Add(new RecurranceValue(RecurrencePrefix.Day, weekNumber, recurrenceDay.GetDescription())); } RecurrenceRule = new RecurrenceRuleElement(RecurrenceFrequency.Yearly, items); StartDate = new DateTime(rule.DateStart.Year <= 1970 ? 1970 : rule.DateStart.Year, rule.DateStart.Month, rule.DateStart.Day, transition.TimeOfDay.Hour, transition.TimeOfDay.Minute, transition.TimeOfDay.Second); } }
public RecurrenceWeekday(int?number, DayOfWeek day) { Number = number; Day = (RecurrenceDayOfWeek)day; }