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);
            }
        }
Esempio n. 2
0
 public RecurrenceWeekday(int?number, DayOfWeek day)
 {
     Number = number;
     Day    = (RecurrenceDayOfWeek)day;
 }