TimeZoneInfo.GetAdjustmentRules Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Načte pole TimeZoneInfo.AdjustmentRule objektů, které platí pro aktuální TimeZoneInfo objekt.
public:
cli::array <TimeZoneInfo::AdjustmentRule ^> ^ GetAdjustmentRules();
public TimeZoneInfo.AdjustmentRule[] GetAdjustmentRules ();
member this.GetAdjustmentRules : unit -> TimeZoneInfo.AdjustmentRule[]
Public Function GetAdjustmentRules () As TimeZoneInfo.AdjustmentRule()
Návraty
Pole objektů pro toto časové pásmo.
Výjimky
Systém nemá dostatek paměti k vytvoření kopie pravidel úprav v paměti.
Příklady
Následující příklad načte všechna časová pásma, která jsou definována v místním systému, a zobrazí úplné informace o jejich pravidlech úprav do konzoly.
private enum WeekOfMonth
{
First = 1,
Second = 2,
Third = 3,
Fourth = 4,
Last = 5,
}
private static void ShowStartAndEndDates()
{
// Get all time zones from system
ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
string[] monthNames = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames;
// Get each time zone
foreach (TimeZoneInfo timeZone in timeZones)
{
TimeZoneInfo.AdjustmentRule[] adjustments = timeZone.GetAdjustmentRules();
// Display message for time zones with no adjustments
if (adjustments.Length == 0)
{
Console.WriteLine("{0} has no adjustment rules", timeZone.StandardName);
}
else
{
// Handle time zones with 1 or 2+ adjustments differently
bool showCount = false;
int ctr = 0;
string spacer = "";
Console.WriteLine("{0} Adjustment rules", timeZone.StandardName);
if (adjustments.Length > 1)
{
showCount = true;
spacer = " ";
}
// Iterate adjustment rules
foreach (TimeZoneInfo.AdjustmentRule adjustment in adjustments)
{
if (showCount)
{
Console.WriteLine(" Adjustment rule #{0}", ctr+1);
ctr++;
}
// Display general adjustment information
Console.WriteLine("{0} Start Date: {1:D}", spacer, adjustment.DateStart);
Console.WriteLine("{0} End Date: {1:D}", spacer, adjustment.DateEnd);
Console.WriteLine("{0} Time Change: {1}:{2:00} hours", spacer,
adjustment.DaylightDelta.Hours, adjustment.DaylightDelta.Minutes);
// Get transition start information
TimeZoneInfo.TransitionTime transitionStart = adjustment.DaylightTransitionStart;
Console.Write("{0} Annual Start: ", spacer);
if (transitionStart.IsFixedDateRule)
{
Console.WriteLine("On {0} {1} at {2:t}",
monthNames[transitionStart.Month - 1],
transitionStart.Day,
transitionStart.TimeOfDay);
}
else
{
Console.WriteLine("The {0} {1} of {2} at {3:t}",
((WeekOfMonth)transitionStart.Week).ToString(),
transitionStart.DayOfWeek.ToString(),
monthNames[transitionStart.Month - 1],
transitionStart.TimeOfDay);
}
// Get transition end information
TimeZoneInfo.TransitionTime transitionEnd = adjustment.DaylightTransitionEnd;
Console.Write("{0} Annual End: ", spacer);
if (transitionEnd.IsFixedDateRule)
{
Console.WriteLine("On {0} {1} at {2:t}",
monthNames[transitionEnd.Month - 1],
transitionEnd.Day,
transitionEnd.TimeOfDay);
}
else
{
Console.WriteLine("The {0} {1} of {2} at {3:t}",
((WeekOfMonth)transitionEnd.Week).ToString(),
transitionEnd.DayOfWeek.ToString(),
monthNames[transitionEnd.Month - 1],
transitionEnd.TimeOfDay);
}
}
}
Console.WriteLine();
}
}
type WeekOfMonth =
| First = 1
| Second = 2
| Third = 3
| Fourth = 4
| Last = 5
let showStartAndEndDates () =
// Get all time zones from system
let timeZones = TimeZoneInfo.GetSystemTimeZones()
let monthNames = CultureInfo.CurrentCulture.DateTimeFormat.MonthNames
// Get each time zone
for timeZone in timeZones do
let adjustments = timeZone.GetAdjustmentRules()
// Display message for time zones with no adjustments
if adjustments.Length = 0 then
printfn $"{timeZone.StandardName} has no adjustment rules"
else
// Handle time zones with 1 or 2+ adjustments differently
let mutable ctr = 0
let showCount, spacer =
if adjustments.Length > 1 then
true, " "
else
false, ""
printfn $"{timeZone.StandardName} Adjustment rules"
// Iterate adjustment rules
for adjustment in adjustments do
if showCount then
printfn $" Adjustment rule #{ctr + 1}"
ctr <- ctr + 1
// Display general adjustment information
printfn $"{spacer} Start Date: {adjustment.DateStart:D}"
printfn $"{spacer} End Date: {adjustment.DateEnd:D}"
printfn $"{spacer} Time Change: {adjustment.DaylightDelta.Hours}:{adjustment.DaylightDelta.Minutes:D2} hours"
// Get transition start information
let transitionStart = adjustment.DaylightTransitionStart
printf $"{spacer} Annual Start: "
if transitionStart.IsFixedDateRule then
printfn $"On {monthNames[transitionStart.Month - 1]} {transitionStart.Day} at {transitionStart.TimeOfDay:t}"
else
printfn $"The {transitionStart.Week |> enum<WeekOfMonth>} {transitionStart.DayOfWeek} of {monthNames[transitionStart.Month - 1]} at {transitionStart.TimeOfDay:t}"
// Get transition end information
let transitionEnd = adjustment.DaylightTransitionEnd
printf $"{spacer} Annual End: "
if transitionEnd.IsFixedDateRule then
printfn $"On {monthNames[transitionEnd.Month - 1]} {transitionEnd.Day} at {transitionEnd.TimeOfDay:t}"
else
printfn $"The {enum<WeekOfMonth> transitionEnd.Week} {transitionEnd.DayOfWeek} of {monthNames[transitionEnd.Month - 1]} at {transitionEnd.TimeOfDay:t}"
Console.WriteLine()
Private Enum WeekOfMonth As Integer
First = 1
Second = 2
Third = 3
Fourth = 4
Last = 5
End Enum
Private Sub ShowStartAndEndDates()
' Get all time zones from system
Dim timeZones As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones()
' Get each time zone
For Each timeZone As TimeZoneInfo In timeZones
Dim adjustments() As TimeZoneInfo.AdjustmentRule = timeZone.GetAdjustmentRules()
' Display message for time zones with no adjustments
If adjustments.Length = 0 Then
Console.WriteLine("{0} has no adjustment rules", timeZone.StandardName)
Else
' Handle time zones with 1 or 2+ adjustments differently
Dim showCount As Boolean = False
Dim ctr As Integer = 0
Dim spacer As String = ""
Console.WriteLine("{0} Adjustment rules", timeZone.StandardName)
If adjustments.Length > 1 Then showCount = True : spacer = " "
' Iterate adjustment rules
For Each adjustment As TimeZoneInfo.AdjustmentRule in adjustments
If showCount Then
Console.WriteLine(" Adjustment rule #{0}", ctr+1)
ctr += 1
End If
' Display general adjustment information
Console.WriteLine("{0} Start Date: {1:D}", spacer, adjustment.DateStart)
Console.WriteLine("{0} End Date: {1:D}", spacer, adjustment.DateEnd)
Console.WriteLine("{0} Time Change: {1}:{2:00} hours", spacer, _
adjustment.DaylightDelta.Hours, adjustment.DaylightDelta.Minutes)
' Get transition start information
Dim transitionStart As TimeZoneInfo.TransitionTime = adjustment.DaylightTransitionStart
Console.Write("{0} Annual Start: ", spacer)
If transitionStart.IsFixedDateRule Then
Console.WriteLine("On {0} {1} at {2:t}", _
MonthName(transitionStart.Month), _
transitionStart.Day, _
transitionStart.TimeOfDay)
Else
Console.WriteLine("The {0} {1} of {2} at {3:t}", _
CType(transitionStart.Week, WeekOfMonth).ToString(), _
transitionStart.DayOfWeek.ToString(), _
MonthName(transitionStart.Month), _
transitionStart.TimeOfDay)
End If
' Get transition end information
Dim transitionEnd As TimeZoneInfo.TransitionTime = adjustment.DaylightTransitionEnd
Console.Write("{0} Annual End: ", spacer)
If transitionEnd.IsFixedDateRule Then
Console.WriteLine("On {0} {1} at {2:t}", _
MonthName(transitionEnd.Month), _
transitionEnd.Day, _
transitionEnd.TimeOfDay)
Else
Console.WriteLine("The {0} {1} of {2} at {3:t}", _
CType(transitionEnd.Week, WeekOfMonth).ToString(), _
transitionEnd.DayOfWeek.ToString(), _
MonthName(transitionEnd.Month), _
transitionEnd.TimeOfDay)
End If
Next
End If
Console.WriteLine()
Next
End Sub
Poznámky
Metoda GetAdjustmentRules načte pole System.TimeZoneInfo.AdjustmentRule objektů. Každý objekt v poli definuje efektivní počáteční a koncové datum úpravy časového pásma a také jeho rozdíl (přesnou částku, o kterou úprava způsobí změnu času). Kromě toho dvě vlastnosti vrací System.TimeZoneInfo.TransitionTime objekty, které definují, kdy dojde k každému ročnímu přechodu na standardní čas a z nich.
Pokud má časové pásmo více pravidel úprav, jsou obvykle seřazená od nejstaršího (v indexu 0) po nejpozději (v indexu Length - 1).
Pokud časové pásmo nemá žádná pravidla úprav, GetAdjustmentRules vrátí metoda prázdnou matici (matici, jejíž Length hodnota je nula).
Jakékoli úpravy prvků pole vrácených metodou GetAdjustmentRules se neprojeví v pravidlech úprav, která patří do určitého časového pásma. Chcete-li upravit pravidla úprav časového pásma (například tak, aby odrážela jeho historický přechod na letní čas a z letního času), je nutné vytvořit nové časové pásmo s příslušnými pravidly úprav, nikoli změnit stávající.