Week refers to the week of the month, with “5” meaning the last week.

   
 

using System;
using System.Globalization;
public class MainClass {
    public static void Main() {
        TimeZoneInfo wa = TimeZoneInfo.FindSystemTimeZoneById("W. Australia Standard Time");

        foreach (TimeZoneInfo.AdjustmentRule rule in wa.GetAdjustmentRules()) {
            Console.WriteLine("Rule: applies from " + rule.DateStart +
                                              " to " + rule.DateEnd);

            Console.WriteLine("   Delta: " + rule.DaylightDelta);

            Console.WriteLine("   Start: " + FormatTransitionTime
                                             (rule.DaylightTransitionStart, false));

            Console.WriteLine("   End:   " + FormatTransitionTime
                                             (rule.DaylightTransitionEnd, true));
            Console.WriteLine();
        }
    }
    static string FormatTransitionTime(TimeZoneInfo.TransitionTime tt,
                                    bool endTime) {
        if (endTime && tt.IsFixedDateRule
                    && tt.Day == 1 && tt.Month == 1
                    && tt.TimeOfDay == DateTime.MinValue)
            return "-";

        string s;
        if (tt.IsFixedDateRule)
            s = tt.Day.ToString();
        else
            s = "The first second third fourth last".Split()[tt.Week - 1] +
                " " + tt.DayOfWeek + " in";

        return s + " " + DateTimeFormatInfo.CurrentInfo.MonthNames[tt.Month - 1]
                 + " at " + tt.TimeOfDay.TimeOfDay;
    }
}

    


TimeZoneInfo also provides IsDaylightSavingTime and GetUtcOffset methods–the difference is that they accept either a DateTime or DateTimeOffset.

   
 

using System;
public class MainClass {
    public static void Main() {

        TimeZoneInfo wa = TimeZoneInfo.FindSystemTimeZoneById("W. Australia Standard Time");

        Console.WriteLine(wa.Id);
        Console.WriteLine(wa.DisplayName);
        Console.WriteLine(wa.BaseUtcOffset);
        Console.WriteLine(wa.SupportsDaylightSavingTime);
    }
}

    


Convert To TimeZone

   
 

//Octavalent Extension Methods
//http://sdfasdf.codeplex.com/
//Library of extension methods for .Net create by Octavalent (www.octavalent.nl)

using System;
    public static class DateTimeExtensions
    {

        public static DateTime ConvertToTimeZone(this DateTime dateTime, string SystemTimeZoneId)
        {
            dateTime = dateTime.ToUniversalTime();
            dateTime = dateTime.Add(TimeZoneInfo.FindSystemTimeZoneById(SystemTimeZoneId).GetUtcOffset(dateTime));
            return dateTime;
        }
   }