There seem to be two zones in .NET (at least on my Windows 8 installation) that are mountainous.
There's a "US Mountain Standard Time" that you use that doesn't watch DST (this is for Arizona) - and a simple "Mountain Standard Time" that watches DST. Therefore, you just need to get rid of the "USA" part, and it will work:
using System; class Test { static void Main() { DateTime octoberUtc = new DateTime(2012, 10, 1, 0, 0, 0, DateTimeKind.Utc); DateTime decemberUtc = new DateTime(2012, 12, 1, 0, 0, 0, DateTimeKind.Utc); ConvertToMountainTime(octoberUtc); ConvertToMountainTime(decemberUtc); } static void ConvertToMountainTime(DateTime utc) { DateTime mountain = TimeZoneInfo.ConvertTimeBySystemTimeZoneId (utc, "Mountain Standard Time"); Console.WriteLine("{0} (UTC) = {1} Mountain time", utc, mountain); } }
Output (UK culture):
01/10/2012 00:00:00 (UTC) = 30/09/2012 18:00:00 Mountain time 01/12/2012 00:00:00 (UTC) = 30/11/2012 17:00:00 Mountain time
Jon skeet
source share