TimeZoneInfo.AdjustmentRule.DateStart Property
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Gets the date when the adjustment rule takes effect.
public:
property DateTime DateStart { DateTime get(); };
public DateTime DateStart { get; }
member this.DateStart : DateTime
Public ReadOnly Property DateStart As DateTime
Property Value
A DateTime value that indicates when the adjustment rule takes effect.
Examples
The following example displays information about all of the time zones defined in the local computer's system registry, including the starting and ending dates of their adjustment rules.
using System;
using System.Collections.ObjectModel;
using System.Globalization;
public class Example
{
public static void Main()
{
ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
DateTimeFormatInfo dateInfo = CultureInfo.CurrentCulture.DateTimeFormat;
foreach (var zone in timeZones)
{
Console.WriteLine("{0} transition time information:", zone.StandardName);
Console.WriteLine(" Time zone information: ");
Console.WriteLine(" Base UTC Offset: {0}", zone.BaseUtcOffset);
Console.WriteLine(" Supports DST: {0}", zone.SupportsDaylightSavingTime);
TimeZoneInfo.AdjustmentRule[] adjustmentRules= zone.GetAdjustmentRules();
// Indicate that time zone has no adjustment rules
if (adjustmentRules.Length == 0) {
Console.WriteLine(" No adjustment rules defined.");
}
else {
Console.WriteLine(" Adjustment Rules: {0}", adjustmentRules.Length);
// Iterate adjustment rules
foreach (var adjustmentRule in adjustmentRules) {
Console.WriteLine(" Adjustment rule from {0:d} to {1:d}:",
adjustmentRule.DateStart,
adjustmentRule.DateEnd);
Console.WriteLine(" Delta: {0}", adjustmentRule.DaylightDelta);
// Get start of transition
TimeZoneInfo.TransitionTime daylightStart = adjustmentRule.DaylightTransitionStart;
// Display information on floating date rule
if (! daylightStart.IsFixedDateRule)
Console.WriteLine(" Begins at {0:t} on the {1} {2} of {3}",
daylightStart.TimeOfDay,
(WeekOfMonth) daylightStart.Week,
daylightStart.DayOfWeek,
dateInfo.GetMonthName(daylightStart.Month));
// Display information on fixed date rule
else
Console.WriteLine(" Begins at {0:t} on {1} {2}",
daylightStart.TimeOfDay,
dateInfo.GetMonthName(daylightStart.Month),
daylightStart.Day);
// Get end of transition.
TimeZoneInfo.TransitionTime daylightEnd = adjustmentRule.DaylightTransitionEnd;
// Display information on floating date rule.
if (!daylightEnd.IsFixedDateRule)
Console.WriteLine(" Ends at {0:t} on the {1} {2} of {3}",
daylightEnd.TimeOfDay,
(WeekOfMonth) daylightEnd.Week,
daylightEnd.DayOfWeek,
dateInfo.GetMonthName(daylightEnd.Month));
// Display information on fixed date rule.
else
Console.WriteLine(" Ends at {0:t} on {1} {2}",
daylightEnd.TimeOfDay,
dateInfo.GetMonthName(daylightEnd.Month),
daylightEnd.Day);
}
}
}
}
private enum WeekOfMonth
{
First = 1,
Second = 2,
Third = 3,
Fourth = 4,
Last = 5,
}
}
// A portion of the output from the example might appear as follows:
// Tonga Standard Time transition time information:
// Time zone information:
// Base UTC Offset: 13:00:00
// Supports DST: False
// No adjustment rules defined.
// Samoa Standard Time transition time information:
// Time zone information:
// Base UTC Offset: 13:00:00
// Supports DST: True
// Adjustment Rules: 4
// Adjustment rule from 1/1/0001 to 12/31/2009:
// Delta: 00:00:00
// Begins at 12:00 AM on January 1
// Ends at 12:00 AM on January 1
// Adjustment rule from 1/1/2010 to 12/31/2010:
// Delta: 01:00:00
// Begins at 11:59 PM on the Last Saturday of September
// Ends at 12:00 AM on the First Friday of January
// Adjustment rule from 1/1/2011 to 12/31/2011:
// Delta: 01:00:00
// Begins at 3:00 AM on the Fourth Saturday of September
// Ends at 4:00 AM on the First Saturday of April
// Adjustment rule from 1/1/2012 to 12/31/9999:
// Delta: 01:00:00
// Begins at 12:00 AM on the Last Sunday of September
// Ends at 1:00 AM on the First Sunday of April
// Line Islands Standard Time transition time information:
// Time zone information:
// Base UTC Offset: 14:00:00
// Supports DST: False
// No adjustment rules defined.
open System
open System.Globalization
let timeZones = TimeZoneInfo.GetSystemTimeZones()
let dateInfo = CultureInfo.CurrentCulture.DateTimeFormat
type WeekOfMonth =
| First = 1
| Second = 2
| Third = 3
| Fourth = 4
| Last = 5
for zone in timeZones do
printfn $"{zone.StandardName} transition time information:"
printfn " Time zone information: "
printfn $" Base UTC Offset: {zone.BaseUtcOffset}"
printfn $" Supports DST: {zone.SupportsDaylightSavingTime}"
let adjustmentRules= zone.GetAdjustmentRules()
// Indicate that time zone has no adjustment rules
if adjustmentRules.Length = 0 then
printfn " No adjustment rules defined."
else
printfn $" Adjustment Rules: {adjustmentRules.Length}"
// Iterate adjustment rules
for adjustmentRule in adjustmentRules do
printfn $" Adjustment rule from {adjustmentRule.DateStart:d} to {adjustmentRule.DateEnd:d}:"
printfn $" Delta: {adjustmentRule.DaylightDelta}"
// Get start of transition
let daylightStart = adjustmentRule.DaylightTransitionStart
// Display information on floating date rule
if not daylightStart.IsFixedDateRule then
printfn $" Begins at {daylightStart.TimeOfDay:t} on the {enum<WeekOfMonth> daylightStart.Week} {daylightStart.DayOfWeek} of {dateInfo.GetMonthName daylightStart.Month}"
// Display information on fixed date rule
else
printfn $" Begins at {daylightStart.TimeOfDay:t} on {dateInfo.GetMonthName daylightStart.Month} {daylightStart.Day}"
// Get end of transition.
let daylightEnd = adjustmentRule.DaylightTransitionEnd
// Display information on floating date rule.
if not daylightEnd.IsFixedDateRule then
printfn $" Ends at {daylightEnd.TimeOfDay:t} on the {enum<WeekOfMonth> daylightEnd.Week} {daylightEnd.DayOfWeek} of {dateInfo.GetMonthName daylightEnd.Month}"
// Display information on fixed date rule.
else
printfn $" Ends at {daylightEnd.TimeOfDay:t} on {dateInfo.GetMonthName daylightEnd.Month} {daylightEnd.Day}"
// A portion of the output from the example might appear as follows:
// Tonga Standard Time transition time information:
// Time zone information:
// Base UTC Offset: 13:00:00
// Supports DST: False
// No adjustment rules defined.
// Samoa Standard Time transition time information:
// Time zone information:
// Base UTC Offset: 13:00:00
// Supports DST: True
// Adjustment Rules: 4
// Adjustment rule from 1/1/0001 to 12/31/2009:
// Delta: 00:00:00
// Begins at 12:00 AM on January 1
// Ends at 12:00 AM on January 1
// Adjustment rule from 1/1/2010 to 12/31/2010:
// Delta: 01:00:00
// Begins at 11:59 PM on the Last Saturday of September
// Ends at 12:00 AM on the First Friday of January
// Adjustment rule from 1/1/2011 to 12/31/2011:
// Delta: 01:00:00
// Begins at 3:00 AM on the Fourth Saturday of September
// Ends at 4:00 AM on the First Saturday of April
// Adjustment rule from 1/1/2012 to 12/31/9999:
// Delta: 01:00:00
// Begins at 12:00 AM on the Last Sunday of September
// Ends at 1:00 AM on the First Sunday of April
// Line Islands Standard Time transition time information:
// Time zone information:
// Base UTC Offset: 14:00:00
// Supports DST: False
// No adjustment rules defined.
Imports System.Collections.ObjectModel
Imports System.Globalization
Module Example
Public Sub Main()
Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
Dim dateInfo As DateTimeFormatInfo = CultureInfo.CurrentCulture.DateTimeFormat
For Each zone In timeZones
Console.WriteLine("{0} transition time information:", zone.StandardName)
Console.WriteLine(" Time zone information: ")
Console.WriteLine(" Base UTC Offset: {0}", zone.BaseUtcOffset)
Console.WriteLine(" Supports DST: {0}", zone.SupportsDaylightSavingTime)
Dim adjustmentRules() As TimeZoneInfo.AdjustmentRule = zone.GetAdjustmentRules()
' Indicate that time zone has no adjustment rules
If adjustmentRules.Length = 0 Then
Console.WriteLine(" No adjustment rules defined.")
Else
Console.WriteLine(" Adjustment Rules: {0}", adjustmentRules.Length)
' Iterate adjustment rules
For Each adjustmentRule In adjustmentRules
Console.WriteLine(" Adjustment rule from {0:d} to {1:d}:",
adjustmentRule.DateStart,
adjustmentRule.DateEnd)
Console.WriteLine(" Delta: {0}", adjustmentRule.DaylightDelta)
' Get start of transition
Dim daylightStart As TimeZoneInfo.TransitionTime = adjustmentRule.DaylightTransitionStart
' Display information on floating date rule
If Not daylightStart.IsFixedDateRule Then
Console.WriteLine(" Begins at {0:t} on the {1} {2} of {3}",
daylightStart.TimeOfDay,
CType(daylightStart.Week, WeekOfMonth),
daylightStart.DayOfWeek,
dateInfo.GetMonthName(daylightStart.Month))
' Display information on fixed date rule
Else
Console.WriteLine(" Begins at {0:t} on {1} {2}",
daylightStart.TimeOfDay,
dateInfo.GetMonthName(daylightStart.Month),
daylightStart.Day)
End If
' Get end of transition.
Dim daylightEnd As TimeZoneInfo.TransitionTime = adjustmentRule.DaylightTransitionEnd
' Display information on floating date rule.
If Not daylightEnd.IsFixedDateRule Then
Console.WriteLine(" Ends at {0:t} on the {1} {2} of {3}",
daylightEnd.TimeOfDay,
CType(daylightEnd.Week, WeekOfMonth),
daylightEnd.DayOfWeek,
dateInfo.GetMonthName(daylightEnd.Month))
' Display information on fixed date rule.
Else
Console.WriteLine(" Ends at {0:t} on {1} {2}",
daylightEnd.TimeOfDay,
dateInfo.GetMonthName(daylightEnd.Month),
daylightEnd.Day)
End If
Next
End If
Next
End Sub
Private Enum WeekOfMonth As Integer
First = 1
Second = 2
Third = 3
Fourth = 4
Last = 5
End Enum
End Module
' A portion of the output from the example might appear as follows:
' Tonga Standard Time transition time information:
' Time zone information:
' Base UTC Offset: 13:00:00
' Supports DST: False
' No adjustment rules defined.
' Samoa Standard Time transition time information:
' Time zone information:
' Base UTC Offset: 13:00:00
' Supports DST: True
' Adjustment Rules: 4
' Adjustment rule from 1/1/0001 to 12/31/2009:
' Delta: 00:00:00
' Begins at 12:00 AM on January 1
' Ends at 12:00 AM on January 1
' Adjustment rule from 1/1/2010 to 12/31/2010:
' Delta: 01:00:00
' Begins at 11:59 PM on the Last Saturday of September
' Ends at 12:00 AM on the First Friday of January
' Adjustment rule from 1/1/2011 to 12/31/2011:
' Delta: 01:00:00
' Begins at 3:00 AM on the Fourth Saturday of September
' Ends at 4:00 AM on the First Saturday of April
' Adjustment rule from 1/1/2012 to 12/31/9999:
' Delta: 01:00:00
' Begins at 12:00 AM on the Last Sunday of September
' Ends at 1:00 AM on the First Sunday of April
' Line Islands Standard Time transition time information:
' Time zone information:
' Base UTC Offset: 14:00:00
' Supports DST: False
' No adjustment rules defined.
Remarks
The value of the DateStart property is a date value without a time component. It defines the date on which a particular adjustment rule goes into effect. This is the date in which a set of transitions (which typically are defined by one transition to daylight savings time and one transition back to standard time) go into effect. For example, an adjustment rule might go into effect on January 1, 2017, that provides for a transition to daylight savings time on the second Sunday of March and for a transition back to standard time on the first Sunday of November. Note that the starting date of the adjustment rule is not tied to the date of the first transition.
You can assign DateTime.MinValue.Date
to the DateEnd property when you create a custom adjustment rule for use in a time zone-aware application that does not have to work with historic time zone information.
Important
Unless there is a compelling reason to do otherwise, you should define the adjustment rule's start date to occur within the time interval during which the time zone observes standard time. Unless there is a compelling reason to do so, you should not define the adjustment rule's start date to occur within the time interval during which the time zone observes daylight saving time. For example, if a time zone's transition from daylight saving time occurs on the third Sunday of March and its transition to daylight saving time occurs on the first Sunday of October, the effective start date of the adjustment rule should not be January 1 of a particular year, since that date occurs within the period of daylight saving time.
By default, the registry in Windows XP defines a single adjustment rule whose start date is Monday, January 01, 0001 (the value of DateTime.MinValue.Date
), for each time zone. For time zones in the United States, the registry in Windows Vista defines two adjustment rules:
Monday, January 01, 0001, to Sunday, December 31, 2006.
Monday, January 01, 2007, to Friday, December 31, 9999.
This means that, although time zone adjustment rules stored in the registry are useful for performing current time zone-related operations, they cannot be reliably used for retrieving historical time zone information. For information about defining a custom time zone with multiple adjustment rules that can be used in a historical time zone-aware application, see How to: Create Time Zones with Adjustment Rules.