Share via


Comment : énumérer les fuseaux horaires d'un ordinateur

Mise à jour : novembre 2007

Pour utiliser correctement un fuseau horaire désigné, le système doit pouvoir accéder aux informations le concernant. Les systèmes d'exploitation Windows XP et Windows Vista stockent ces informations dans le Registre. Toutefois, bien qu'il existe de nombreux fuseaux horaires dans le monde, le Registre contient des informations relatives à un sous-ensemble de fuseaux horaires uniquement. De plus, le Registre est une structure dynamique dont le contenu peut être modifié délibérément ou accidentellement. En conséquence, un fuseau horaire particulier ne peut pas toujours être défini ni disponible sur un système. Pour de nombreuses applications qui utilisent des informations de fuseau horaire, il convient d'abord de déterminer si les fuseaux horaires requis sont disponibles sur le système local ou de fournir à l'utilisateur une liste des fuseaux horaires. Il faut donc qu'une application énumère les fuseaux horaires définis sur un système local.

Remarque :

Si une application dépend de la présence d'un fuseau horaire particulier qui n'est pas défini sur un système local, elle peut sérialiser et désérialiser les informations relatives au fuseau horaire. Le fuseau horaire peut ensuite être ajouté à un contrôle de liste pour que l'utilisateur de l'application puisse le sélectionner. Pour plus d'informations, consultez Comment : enregistrer des fuseaux horaires dans une ressource incorporée et Comment : restaurer des fuseaux horaires dans une ressource incorporée.

Pour énumérer les fuseaux horaires présents sur le système local

  1. Appelez la méthode TimeZoneInfo.GetSystemTimeZones. La méthode retourne une collection ReadOnlyCollection<T> générique d'objets TimeZoneInfo. Les entrées dans la collection sont triées par leur propriété DisplayName. Par exemple :

    Dim tzCollection As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones
    
    ReadOnlyCollection<TimeZoneInfo> tzCollection;
    tzCollection = TimeZoneInfo.GetSystemTimeZones();
    
  2. Énumérez les objets TimeZoneInfo individuels dans la collection en utilisant une boucle foreach (en C#) ou For Each…Next (dans Visual Basic) et exécutez tous les traitements nécessaires sur chaque objet. Par exemple, le code suivant énumère la collection ReadOnlyCollection<T> d'objets TimeZoneInfo retournée à l'étape 1 et affiche le nom complet de chaque fuseau horaire sur la console.

    For Each timeZone As TimeZoneInfo In tzCollection
       Console.WriteLine("   {0}: {1}", timeZone.Id, timeZone.DisplayName)
    Next
    
    foreach (TimeZoneInfo timeZone in tzCollection)
       Console.WriteLine("   {0}: {1}", timeZone.Id, timeZone.DisplayName);
    

Pour fournir à l'utilisateur une liste des fuseaux horaires présents sur le système local

  1. Appelez la méthode TimeZoneInfo.GetSystemTimeZones. La méthode retourne une collection ReadOnlyCollection<T> générique d'objets TimeZoneInfo.

  2. Assignez la collection retournée à l'étape 1 à la propriété DataSource d'un contrôle de liste Windows Forms ou ASP.NET.

  3. Récupérez l'objet TimeZoneInfo que l'utilisateur a sélectionné.

L'exemple suivant utilise une application Windows pour illustrer cette situation.

Exemple

Une application Windows qui affiche les fuseaux horaires définis sur un système dans une zone de liste est lancée. Une boîte de dialogue s'affiche ensuite ; elle contient la valeur de la propriété DisplayName de l'objet de fuseau horaire sélectionné par l'utilisateur .

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
   Dim tzCollection As ReadOnlyCollection(Of TimeZoneInfo)
   tzCollection = TimeZoneInfo.GetSystemTimeZones()
   Me.timeZoneList.DataSource = tzCollection
End Sub

Private Sub OkButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OkButton.Click
   Dim selectedTimeZone As TimeZoneInfo = DirectCast(Me.timeZoneList.SelectedItem(), TimeZoneInfo)
   MsgBox("You selected the " & selectedTimeZone.ToString() & " time zone.")
End Sub
private void Form1_Load(object sender, EventArgs e)
{
   ReadOnlyCollection<TimeZoneInfo> tzCollection; 
   tzCollection = TimeZoneInfo.GetSystemTimeZones();
   this.timeZoneList.DataSource = tzCollection;
}

private void OkButton_Click(object sender, EventArgs e)
{
   TimeZoneInfo selectedTimeZone = (TimeZoneInfo) this.timeZoneList.SelectedItem;
   MessageBox.Show("You selected the " + selectedTimeZone.ToString() + " time zone.");
}

La plupart des contrôles de liste (tels que le contrôle System.Windows.Forms.ListBox ou System.Web.UI.WebControls.BulletedList ) vous permettent d'assigner une collection de variables objet à leur propriété DataSource tant que cette collection implémente l'interface IEnumerable. (C'est le cas pour la classe générique ReadOnlyCollection<T>.). Pour afficher un objet individuel dans la collection, le contrôle appelle la méthode ToString correspondante afin d'extraire la chaîne utilisée pour représenter l'objet. Dans le cas d'objets TimeZoneInfo, la méthode ToString retourne le nom complet de l'objet TimeZoneInfo (la valeur de sa propriété DisplayName).

Remarque :

Comme les contrôles de liste appellent la méthode ToString d'un objet, vous pouvez assigner une collection d'objets TimeZoneInfo au contrôle, afficher un nom explicite pour chaque objet et récupérer l'objet TimeZoneInfo que l'utilisateur a sélectionné. Il n'est donc plus nécessaire d'extraire une chaîne pour chaque objet dans la collection, d'assigner la chaîne à une collection qui est assignée à son tour à la propriété DataSource du contrôle, de récupérer la chaîne que l'utilisateur a sélectionnée, puis d'utiliser cette chaîne pour extraire l'objet qu'il décrit.

Compilation du code

Cet exemple nécessite :

Voir aussi

Tâches

Comment : enregistrer des fuseaux horaires dans une ressource incorporée

Comment : restaurer des fuseaux horaires dans une ressource incorporée

Autres ressources

Heures et fuseaux horaires