using System.Globalization;
using System.Collections.Generic;
using System.Collections.ObjectModel;
public static void Main()
private static void ShowStartAndEndDates()
List<TimeZoneInfo> timeZones = new List<TimeZoneInfo>();
timeZones.Add(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"));
string[] monthNames = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
foreach (TimeZoneInfo timeZone in timeZones)
TimeZoneInfo.AdjustmentRule[] adjustments = timeZone.GetAdjustmentRules();
Console.WriteLine("{0} rules found!",adjustments.Length);
if (adjustments.Length == 0)
Console.WriteLine("{0} has no adjustment rules", timeZone.StandardName);
Console.WriteLine("{0} Adjustment rules", timeZone.StandardName);
if (adjustments.Length > 1)
foreach (TimeZoneInfo.AdjustmentRule adjustment in adjustments)
Console.WriteLine(" Adjustment rule #{0}", ctr+1);
Console.WriteLine("{0} Start Date: {1:D}", spacer, adjustment.DateStart);
Console.WriteLine("{0} End Date: {1:D}", spacer, adjustment.DateEnd);
Console.WriteLine("{0} Time Change: {1}:{2:00} hours", spacer,
adjustment.DaylightDelta.Hours, adjustment.DaylightDelta.Minutes);
TimeZoneInfo.TransitionTime transitionStart = adjustment.DaylightTransitionStart;
Console.Write("{0} Annual Start: ", spacer);
if (transitionStart.IsFixedDateRule)
Console.WriteLine("On {0} {1} at {2:t}",
monthNames[transitionStart.Month - 1],
transitionStart.TimeOfDay);
Console.WriteLine("The {0} {1} of {2} at {3:t}",
((WeekOfMonth)transitionStart.Week).ToString(),
transitionStart.DayOfWeek.ToString(),
monthNames[transitionStart.Month - 1],
transitionStart.TimeOfDay);
TimeZoneInfo.TransitionTime transitionEnd = adjustment.DaylightTransitionEnd;
Console.Write("{0} Annual End: ", spacer);
if (transitionEnd.IsFixedDateRule)
Console.WriteLine("On {0} {1} at {2:t}",
monthNames[transitionEnd.Month - 1],
transitionEnd.TimeOfDay);
Console.WriteLine("The {0} {1} of {2} at {3:t}",
((WeekOfMonth)transitionEnd.Week).ToString(),
transitionEnd.DayOfWeek.ToString(),
monthNames[transitionEnd.Month - 1],
transitionEnd.TimeOfDay);