TimeZoneInfo.GetAdjustmentRules Metod

Definition

Hämtar en matris med TimeZoneInfo.AdjustmentRule objekt som gäller för det aktuella TimeZoneInfo objektet.

public:
 cli::array <TimeZoneInfo::AdjustmentRule ^> ^ GetAdjustmentRules();
public TimeZoneInfo.AdjustmentRule[] GetAdjustmentRules();
member this.GetAdjustmentRules : unit -> TimeZoneInfo.AdjustmentRule[]
Public Function GetAdjustmentRules () As TimeZoneInfo.AdjustmentRule()

Returer

En matris med objekt för den här tidszonen.

Undantag

Systemet har inte tillräckligt med minne för att göra en minnesintern kopia av justeringsreglerna.

Exempel

I följande exempel hämtas alla tidszoner som definieras i det lokala systemet och visar fullständig information om deras justeringsregler för konsolen.

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

Kommentarer

Metoden GetAdjustmentRules hämtar en matris med System.TimeZoneInfo.AdjustmentRule objekt. Varje objekt i matrisen definierar det effektiva start- och slutdatumet för tidszonsjusteringen, samt dess delta (exakt hur mycket justeringen gör att tiden ändras). Dessutom returnerar System.TimeZoneInfo.TransitionTime två egenskaper objekt som definierar när varje årlig övergång till och från standardtid inträffar.

Om en tidszon har flera justeringsregler sorteras de vanligtvis från tidigaste (vid index 0) till senast (vid index Length - 1).

Om en tidszon inte har några justeringsregler GetAdjustmentRules returnerar metoden en tom matris (en matris vars Length är noll).

Ändringar av elementen i matrisen som returneras av GetAdjustmentRules metoden återspeglas inte i de justeringsregler som tillhör en viss tidszon. Om du vill ändra en tidszons justeringsregler (till exempel för att återspegla dess historiska övergång till och från sommartid) måste du skapa en ny tidszon med lämpliga justeringsregler i stället för att ändra den befintliga.

Gäller för

Se även