Example #1
0
 public DateTime ToTimeZone(string tzid)
 {
     if (!string.IsNullOrEmpty(tzid))
     {
         if (iCalendar != null)
         {
             iCalTimeZone tz = iCalendar.GetTimeZone(tzid);
             if (tz != null)
             {
                 iCalTimeZoneInfo tzi = tz.GetTimeZoneInfo(this);
                 if (tzi != null)
                 {
                     return(ToTimeZone(tzi));
                 }
             }
             throw new Exception("The '" + tzid + "' time zone could not be resolved.");
         }
         else
         {
             throw new Exception("The iCalDateTime object must have an iCalendar associated with it in order to use TimeZones.");
         }
     }
     else
     {
         throw new ArgumentException("You must provide a valid TZID to the ToTimeZone() method", "tzid");
     }
 }
Example #2
0
        public DateTime ToTimeZone(iCalTimeZoneInfo tzi)
        {
            DateTime value = UTC;

            int mult = tzi.TZOffsetTo.Positive ? 1 : -1;

            value = value.AddHours(tzi.TZOffsetTo.Hours * mult);
            value = value.AddMinutes(tzi.TZOffsetTo.Minutes * mult);
            value = value.AddSeconds(tzi.TZOffsetTo.Seconds * mult);
            value = DateTime.SpecifyKind(value, DateTimeKind.Unspecified);
            return(value);
        }
Example #3
0
        public void Bug1821721()
        {
            iCalendar iCal = new iCalendar();

            iCalTimeZone tz = iCal.Create<iCalTimeZone>();

            tz.TZID = "US-Eastern";
            tz.LastModified = new iCalDateTime(new DateTime(1987, 1, 1, 0, 0, 0, DateTimeKind.Utc));

            ITimeZoneInfo standard = new iCalTimeZoneInfo(Components.STANDARD);
            standard.Start = new iCalDateTime(new DateTime(1967, 10, 29, 2, 0, 0, DateTimeKind.Utc));
            standard.RecurrenceRules.Add(new RecurrencePattern("FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10"));
            standard.OffsetFrom = new UTCOffset("-0400");
            standard.OffsetTo = new UTCOffset("-0500");
            standard.TimeZoneName = "EST";
            tz.AddChild(standard);

            ITimeZoneInfo daylight = new iCalTimeZoneInfo(Components.DAYLIGHT);
            daylight.Start = new iCalDateTime(new DateTime(1987, 4, 5, 2, 0, 0, DateTimeKind.Utc));
            daylight.RecurrenceRules.Add(new RecurrencePattern("FREQ=YEARLY;BYDAY=1SU;BYMONTH=4"));
            daylight.OffsetFrom = new UTCOffset("-0500");
            daylight.OffsetTo = new UTCOffset("-0400");
            daylight.TimeZoneName = "EDT";            
            tz.AddChild(daylight);

            IEvent evt = iCal.Create<Event>();
            evt.Summary = "Test event";
            evt.Start = new iCalDateTime(2007, 1, 24, 8, 0, 0, tzid);
            evt.Duration = TimeSpan.FromHours(1);
            evt.End = new iCalDateTime(2007, 1, 24, 9, 0, 0, tzid);
            IRecurrencePattern recur = new RecurrencePattern("FREQ=MONTHLY;INTERVAL=2;BYDAY=4WE");
            evt.RecurrenceRules.Add(recur);

            EventOccurrenceTest(
                iCal,
                new iCalDateTime(2007, 1, 24),
                new iCalDateTime(2007, 12, 31),
                new iCalDateTime[]
                {                
                    new iCalDateTime(2007, 1, 24, 8, 0, 0, tzid),
                    new iCalDateTime(2007, 3, 28, 8, 0, 0, tzid),
                    new iCalDateTime(2007, 5, 23, 8, 0, 0, tzid),
                    new iCalDateTime(2007, 7, 25, 8, 0, 0, tzid),
                    new iCalDateTime(2007, 9, 26, 8, 0, 0, tzid),
                    new iCalDateTime(2007, 11, 28, 8, 0, 0, tzid)
                },
                null
            );
        }