IsDaylightSavingTime tells you whether a given local DateTime is subject to daylight saving time. UTC times always return false:
using System; class MainClass//from ww w.j a v a 2 s.c o m { public static void Main(string[] args) { Console.Write (DateTime.Now.IsDaylightSavingTime()); // True or False Console.Write (DateTime.UtcNow.IsDaylightSavingTime()); // Always False } }
The following code shows how to deal with time being moved forward during daylight saving time.
The code instantiates a DateTime right in the time changing zone.
using System; using System.Globalization; class MainClass//w ww. ja v a 2 s .c om { public static void Main(string[] args) { DaylightTime changes = TimeZone.CurrentTimeZone.GetDaylightChanges(2010); TimeSpan halfDelta = new TimeSpan(changes.Delta.Ticks / 2); DateTime utc1 = changes.End.ToUniversalTime() - halfDelta; DateTime utc2 = utc1 - changes.Delta; DateTime loc1 = utc1.ToLocalTime(); DateTime loc2 = utc2.ToLocalTime(); Console.WriteLine(loc1); Console.WriteLine(loc2); Console.WriteLine(loc1 == loc2); Console.Write(loc1.ToString("o")); Console.Write(loc2.ToString("o")); Console.WriteLine(loc1.ToUniversalTime() == utc1); Console.WriteLine(loc2.ToUniversalTime() == utc2); } }