예제 #1
0
        static private void PopulateiCalTimeZoneInfo(ITimeZoneInfo tzi, System.TimeZoneInfo.TransitionTime transition, int year)
        {
            var c = CultureInfo.CurrentCulture.Calendar;

            var recurrence = new RecurrencePattern();

            recurrence.Frequency = FrequencyType.Yearly;
            recurrence.ByMonth.Add(transition.Month);
            recurrence.ByHour.Add(transition.TimeOfDay.Hour);
            recurrence.ByMinute.Add(transition.TimeOfDay.Minute);

            if (transition.IsFixedDateRule)
            {
                recurrence.ByMonthDay.Add(transition.Day);
            }
            else
            {
                if (transition.Week != 5)
                {
                    recurrence.ByDay.Add(new WeekDay(transition.DayOfWeek, transition.Week));
                }
                else
                {
                    recurrence.ByDay.Add(new WeekDay(transition.DayOfWeek, -1));
                }
            }

            tzi.RecurrenceRules.Add(recurrence);
        }
예제 #2
0
        static private void PopulateiCalTimeZoneInfo(ITimeZoneInfo tzi, System.TimeZoneInfo.TransitionTime transition, int year)
        {
            Calendar c = CultureInfo.CurrentCulture.Calendar;

            RecurrencePattern recurrence = new RecurrencePattern();

            recurrence.Frequency = FrequencyType.Yearly;
            recurrence.ByMonth.Add(transition.Month);
            recurrence.ByHour.Add(transition.TimeOfDay.Hour);
            recurrence.ByMinute.Add(transition.TimeOfDay.Minute);

            if (transition.IsFixedDateRule)
            {
                recurrence.ByMonthDay.Add(transition.Day);
            }
            else
            {
                recurrence.ByDay.Add(new WeekDay(transition.DayOfWeek));
                int daysInMonth = c.GetDaysInMonth(year, transition.Month);
                int offset      = (transition.Week * 7) - 7;
                if (offset + 7 > daysInMonth)
                {
                    offset = daysInMonth - 7;
                }

                // Add the possible days of the month this could occur.
                for (int i = 1; i <= 7; i++)
                {
                    recurrence.ByMonthDay.Add(i + offset + (int)transition.DayOfWeek);
                }
            }

            tzi.RecurrenceRules.Add(recurrence);
        }
예제 #3
0
        static private void PopulateiCalTimeZoneInfo(ITimeZoneInfo tzi, System.TimeZoneInfo.TransitionTime transition, int year)
        {
            Calendar c = CultureInfo.CurrentCulture.Calendar;

            RecurrencePattern recurrence = new RecurrencePattern();            
            recurrence.Frequency = FrequencyType.Yearly;
            recurrence.ByMonth.Add(transition.Month);
            recurrence.ByHour.Add(transition.TimeOfDay.Hour);
            recurrence.ByMinute.Add(transition.TimeOfDay.Minute);

            if (transition.IsFixedDateRule)
            {
                recurrence.ByMonthDay.Add(transition.Day);
            }
            else
            {
                recurrence.ByDay.Add(new WeekDay(transition.DayOfWeek));
                int daysInMonth = c.GetDaysInMonth(year, transition.Month);
                int offset = (transition.Week * 7) - 7;
                if (offset + 7 > daysInMonth)
                    offset = daysInMonth - 7;

                // Add the possible days of the month this could occur.
                for (int i = 1; i <= 7; i++)
                    recurrence.ByMonthDay.Add(i + offset + (int)transition.DayOfWeek);
            }

            tzi.RecurrenceRules.Add(recurrence);
        }
예제 #4
0
        public IDateTime ToTimeZone(TimeZoneObservance tzo)
        {
            ITimeZoneInfo tzi = tzo.TimeZoneInfo;

            if (tzi != null)
            {
                return(new iCalDateTime(tzi.OffsetTo.ToLocal(UTC), tzo));
            }
            return(null);
        }
예제 #5
0
 private static void PopulateTimeZoneInfoRecurrenceDates(ITimeZoneInfo tzi, List <ZoneInterval> intervals, TimeSpan delta)
 {
     foreach (var interval in intervals)
     {
         var periodList = new PeriodList();
         var time       = interval.IsoLocalStart.ToDateTimeUnspecified();
         var date       = new CalDateTime(time).Add(delta) as CalDateTime;
         if (date == null)
         {
             continue;
         }
         date.HasTime = true;
         periodList.Add(date);
         tzi.RecurrenceDates.Add(periodList);
     }
 }
예제 #6
0
        /// <summary>
        ///     Populates the cal time zone info.
        /// </summary>
        /// <param name="tzi">The time zone info.</param>
        /// <param name="transition">The transition.</param>
        private static void PopulateiCalTimeZoneInfo(ITimeZoneInfo tzi, TimeZoneInfo.TransitionTime transition)
        {
            var recurrence = new RecurrencePattern
            {
                Frequency = FrequencyType.Yearly
            };

            recurrence.ByMonth.Add(transition.Month);
            recurrence.ByHour.Add(transition.TimeOfDay.Hour);
            recurrence.ByMinute.Add(transition.TimeOfDay.Minute);

            if (transition.IsFixedDateRule)
            {
                recurrence.ByMonthDay.Add(transition.Day);
            }
            else
            {
                recurrence.ByDay.Add(transition.Week != 5 ? new WeekDay(transition.DayOfWeek, transition.Week) : new WeekDay(transition.DayOfWeek, -1));
            }

            tzi.RecurrenceRules.Add(recurrence);
        }
예제 #7
0
        public static IDateTime MatchTimeZone(IDateTime dt1, IDateTime dt2)
        {
            Debug.Assert(dt1 != null && dt2 != null);

            // Associate the date/time with the first.
            IDateTime copy = dt2.Copy <IDateTime>();

            copy.AssociateWith(dt1);

            // If the dt1 time does not occur in the same time zone as the
            // dt2 time, then let's convert it so they can be used in the
            // same context (i.e. evaluation).
            if (dt1.TZID != null)
            {
                ITimeZoneInfo tzi = dt1.TimeZoneObservance != null ?
                                    dt1.TimeZoneObservance.Value.TimeZoneInfo :
                                    null;
                if (!string.Equals(dt1.TZID, copy.TZID))
                {
                    return((tzi != null) ? copy.ToTimeZone(tzi) : copy.ToTimeZone(dt1.TZID));
                }
                else
                {
                    return(copy);
                }
            }
            else if (dt1.IsUniversalTime)
            {
                // The first date/time is in UTC time, convert!
                return(new iCalDateTime(copy.UTC));
            }
            else
            {
                // The first date/time is in local time, convert!
                return(new iCalDateTime(copy.Local));
            }
        }
예제 #8
0
        static private void PopulateiCalTimeZoneInfo(ITimeZoneInfo tzi, System.TimeZoneInfo.TransitionTime transition, int year)
        {
            Calendar c = CultureInfo.CurrentCulture.Calendar;

            RecurrencePattern recurrence = new RecurrencePattern();            
            recurrence.Frequency = FrequencyType.Yearly;
            recurrence.ByMonth.Add(transition.Month);
            recurrence.ByHour.Add(transition.TimeOfDay.Hour);
            recurrence.ByMinute.Add(transition.TimeOfDay.Minute);

            if (transition.IsFixedDateRule)
            {
                recurrence.ByMonthDay.Add(transition.Day);
            }
            else
            {
                if( transition.Week != 5 )
                    recurrence.ByDay.Add(new WeekDay(transition.DayOfWeek, transition.Week ));
                else
                    recurrence.ByDay.Add( new WeekDay( transition.DayOfWeek, -1 ) );
            }

            tzi.RecurrenceRules.Add(recurrence);
        }
 public TimeZoneInfoEvaluator(ITimeZoneInfo tzi) : base(tzi)
 {
 }
예제 #10
0
 public TimeZoneObservance(IPeriod period, ITimeZoneInfo tzi) : this()
 {
     Period       = period;
     TimeZoneInfo = tzi;
 }
 public TimeZoneObservance(IPeriod period, ITimeZoneInfo tzi) : this()
 {
     Period = period;
     TimeZoneInfo = tzi;
 }
 public TimeZoneInfoEvaluator(ITimeZoneInfo tzi) : base(tzi)
 {
 }
예제 #13
0
 public IDateTime ToTimeZone(ITimeZoneInfo tzi)
 {
     return new iCalDateTime(tzi.OffsetTo.ToLocal(UTC));
 }
예제 #14
0
        private static void PopulateTimeZoneInfoRecurrenceRules(ITimeZoneInfo tzi, ZoneInterval interval)
        {
            var recurrence = new IntervalRecurrencePattern(interval);

            tzi.RecurrenceRules.Add(recurrence);
        }
예제 #15
0
 public IDateTime ToTimeZone(ITimeZoneInfo tzi)
 {
     return(new iCalDateTime(tzi.OffsetTo.ToLocal(UTC)));
 }