TimeZoneInfo.GetAdjustmentRules Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Récupère un tableau d'objets TimeZoneInfo.AdjustmentRule qui s'appliquent à l'objet TimeZoneInfo actuel.
public:
cli::array <TimeZoneInfo::AdjustmentRule ^> ^ GetAdjustmentRules();
public TimeZoneInfo.AdjustmentRule[] GetAdjustmentRules ();
member this.GetAdjustmentRules : unit -> TimeZoneInfo.AdjustmentRule[]
Public Function GetAdjustmentRules () As TimeZoneInfo.AdjustmentRule()
Retours
Tableau d'objets pour ce fuseau horaire.
Exceptions
Le système n’a pas suffisamment de mémoire pour effectuer une copie en mémoire des règles d’ajustement.
Exemples
L’exemple suivant récupère tous les fuseaux horaires définis sur le système local et affiche des informations complètes sur leurs règles d’ajustement sur la console.
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
Remarques
La GetAdjustmentRules méthode récupère un tableau d’objets System.TimeZoneInfo.AdjustmentRule . Chaque objet du tableau définit la date de début et de fin effective de ce réglage de fuseau horaire, ainsi que son delta (la quantité exacte par laquelle l’ajustement entraîne la modification de l’heure). En outre, deux propriétés retournent System.TimeZoneInfo.TransitionTime des objets qui définissent le moment où chaque transition annuelle vers et depuis l’heure standard se produit.
Si un fuseau horaire a plusieurs règles d’ajustement, elles sont généralement triées de la plus ancienne (à l’index 0) au plus récent (à l’index Length - 1).
Si un fuseau horaire n’a pas de règles d’ajustement, la GetAdjustmentRules méthode retourne un tableau vide (un tableau dont Length la valeur est égale à zéro).
Les modifications apportées aux éléments du tableau retournés par la GetAdjustmentRules méthode ne sont pas reflétées dans les règles d’ajustement qui appartiennent à un fuseau horaire particulier. Pour modifier les règles d’ajustement d’un fuseau horaire (par exemple, afin de refléter sa transition historique vers et à partir de l’heure d’été), vous devez créer un nouveau fuseau horaire avec les règles d’ajustement appropriées, plutôt que de modifier celle existante.