DaylightTime Class
Defines the period of daylight saving time.
Assembly: mscorlib (in mscorlib.dll)
Daylight saving time is a period during the year when the time is advanced, usually by an hour, to take advantage of the extended daylight hours. At the end of the period, the time is set back to the standard time.
The DaylightTime class is used extensively by members of the System.TimeZone class.
The following code example uses the TimeZone.GetDaylightChanges(Int32) method to return the daylight saving time period and offset for selected years.
// Example of the TimeZone.GetDaylightChanges( int ) method. using System; using System.Globalization; class DaylightChangesDemo { // Get the local time zone and a base local time. static TimeZone localZone = TimeZone.CurrentTimeZone; static void CreateDaylightTime( int year ) { // Create a DaylightTime object for the specified year. DaylightTime daylight = localZone.GetDaylightChanges( year ); // Display the start and end dates and the time change. Console.WriteLine( "{0,-7}{1,-20:yyyy-MM-dd HH:mm}" + "{2,-20:yyyy-MM-dd HH:mm}{3}", year, daylight.Start, daylight.End, daylight.Delta ); } static void Main( ) { const string headFmt = "{0,-7}{1,-20}{2,-20}{3}"; Console.WriteLine( "This example of TimeZone.GetDaylightChanges( int ) " + "generates the \nfollowing output, which varies " + "depending on the time zone in which \nit is run. The " + "example creates DaylightTime objects for specified \n" + "years and displays the start and end dates and time " + "change for \ndaylight saving time.\n" ); // Write a message explaining that start dates prior to 1986 // in the en-US culture may not be correct. if( CultureInfo.CurrentCulture.Name == "en-US" ) { Console.WriteLine( "Note: In the [en-US] culture, all start dates are " + "calculated from \nthe first Sunday in April, " + "based on a standard set in 1986. For \ndates " + "prior to 1986, the calculated start date may not " + "be accurate." ); } Console.WriteLine( "\nLocal time: {0}\n", localZone.StandardName ); Console.WriteLine( headFmt, "Year", "Start", "End", "Change" ); Console.WriteLine( headFmt, "----", "-----", "---", "------" ); CreateDaylightTime( 1960 ); CreateDaylightTime( 1970 ); CreateDaylightTime( 1980 ); CreateDaylightTime( 1990 ); CreateDaylightTime( 2000 ); CreateDaylightTime( 2001 ); CreateDaylightTime( 2002 ); CreateDaylightTime( 2003 ); CreateDaylightTime( 2004 ); CreateDaylightTime( 2005 ); CreateDaylightTime( 2020 ); CreateDaylightTime( 2040 ); } } /* This example of TimeZone.GetDaylightChanges( int ) generates the following output, which varies depending on the time zone in which it is run. The example creates DaylightTime objects for specified years and displays the start and end dates and time change for daylight saving time. Note: In the [en-US] culture, all start dates are calculated from the first Sunday in April, based on a standard set in 1986. For dates prior to 1986, the calculated start date may not be accurate. Local time: Pacific Standard Time Year Start End Change ---- ----- --- ------ 1960 1960-04-03 02:00 1960-10-30 02:00 01:00:00 1970 1970-04-05 02:00 1970-10-25 02:00 01:00:00 1980 1980-04-06 02:00 1980-10-26 02:00 01:00:00 1990 1990-04-01 02:00 1990-10-28 02:00 01:00:00 2000 2000-04-02 02:00 2000-10-29 02:00 01:00:00 2001 2001-04-01 02:00 2001-10-28 02:00 01:00:00 2002 2002-04-07 02:00 2002-10-27 02:00 01:00:00 2003 2003-04-06 02:00 2003-10-26 02:00 01:00:00 2004 2004-04-04 02:00 2004-10-31 02:00 01:00:00 2005 2005-04-03 02:00 2005-10-30 02:00 01:00:00 2020 2020-04-05 02:00 2020-10-25 02:00 01:00:00 2040 2040-04-01 02:00 2040-10-28 02:00 01:00:00 */
Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360, Zune
The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
The calculation of daylight time change is correct based on new rule However it did not apply to old rule anymore. eg. year 2004 the daylight time is calculated as between 2004-03-14 02:00 and 2004-11-07 02:00 based on new rule but it should be between 2004-04-04 02:00 2004-10-31 02:00 (in previous document)
DaylightTime Reflects Only the Current Adjustment Rule
The DaylightTime class recognizes only a single adjustment rule, the one that is currently in effect. It ignores any previous adjustment rules. For example, in the continental United States, the current adjustment rule began in 2007. The DaylightTime class, however, applies this adjustment rule to the years 2006 and earlier.
To retrieve all the known adjustment rules for a particular time zone, use the TimeZoneInfo.GetAdjustmentRules method (see
http://msdn.microsoft.com/en-us/library/system.timezoneinfo.getadjustmentrules(VS.90).aspx). This accurately reports all of the information on time zone adjustment rules for which the local computer has information.
More generally, the TimeZoneInfo class and its members should be used instead of TimeZone and DaylightTime.
--Ron Petrusha
Common Language Runtime Developer Content
Microsoft Corporation
- 5/8/2009
- netCentris
- 4/6/2011
- R Petrusha - MSFT