Freigeben über


Gewusst wie: Auflisten der auf einem Computer vorhandenen Zeitzonen

Aktualisiert: November 2007

Damit eine festgelegte Zeitzone erfolgreich verwendet werden kann, müssen die Zeitzonendaten auf dem System vorhanden sein. Bei den Betriebssystemen Windows XP und Windows Vista werden diese Informationen in der Registrierung gespeichert. Die Registrierung enthält nur Daten zu einigen Zeitzonen, obwohl die Gesamtzahl der Zeitzonen auf der Welt sehr groß ist. Darüber hinaus ist die Registrierung auch eine dynamische Struktur, deren Inhalt versehentlich oder absichtlich geändert werden kann. Daher kann eine Anwendung nicht immer davon ausgehen, dass eine bestimmte Zeitzone definiert und im System verfügbar ist. Viele Anwendungen, die Zeitzonendaten verwenden, ermitteln zunächst, ob die benötigten Zeitzonen auf dem lokalen System verfügbar sind, oder sie stellen dem Benutzer eine Liste mit Zeitzonen zur Verfügung, aus denen er auswählen muss. Hierfür muss eine Anwendung die auf einem lokalen System definierten Zeitzonen auflisten.

Hinweis:

Wenn für eine Anwendung eine bestimmte Zeitzone vorhanden sein muss, die möglicherweise nicht auf dem lokalen System definiert ist, kann die Anwendung das Vorhandensein dieser Zeitzone sicherstellen, indem sie die Zeitzonendaten serialisiert und anschließend deserialisiert. Die Zeitzone kann dann einem Listensteuerelement hinzugefügt werden, damit der Benutzer sie auswählen kann. Ausführliche Informationen finden Sie unter Gewusst wie: Speichern von Zeitzonen in einer eingebetteten Ressource und unter Gewusst wie: Wiederherstellen von Zeitzonen aus einer eingebetteten Ressource.

So listen Sie die auf dem lokalen System vorhandene Zeitzonen auf

  1. Rufen Sie die TimeZoneInfo.GetSystemTimeZones-Methode auf. Die Methode gibt eine allgemeine ReadOnlyCollection<T>-Auflistung von TimeZoneInfo-Objekten zurück. Die Einträge in die Auflistung werden nach ihrer DisplayName-Eigenschaft sortiert. Beispiel:

    Dim tzCollection As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones
    
    ReadOnlyCollection<TimeZoneInfo> tzCollection;
    tzCollection = TimeZoneInfo.GetSystemTimeZones();
    
  2. Führen Sie die einzelnen TimeZoneInfo-Objekte in der Auflistung auf, indem Sie eine foreach-Schleife (in C#) oder eine For Each…Next-Schleife (in Visual Basic) verwenden, und verarbeiten Sie die einzelnen Objekte wie erforderlich. Mit dem folgenden Code werden beispielsweise die ReadOnlyCollection<T>-Auflistung der TimeZoneInfo-Objekte, die in Schritt 1 zurückgegeben wurden, und der Anzeigename der einzelnen Zeitzonen auf der Konsole aufgeführt.

    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);
    

So zeigen Sie eine Liste der auf dem lokalen System vorhandenen Zeitzonen für den Benutzer an

  1. Rufen Sie die TimeZoneInfo.GetSystemTimeZones-Methode auf. Die Methode gibt eine allgemeine ReadOnlyCollection<T>-Auflistung von TimeZoneInfo-Objekten zurück.

  2. Weisen Sie die in Schritt 1 zurückgegebene Auflistung der DataSource-Eigenschaft eines Windows Forms- oder ASP.NET-Listensteuerelements zu.

  3. Rufen Sie das TimeZoneInfo-Objekt ab, das der Benutzer ausgewählt hat.

Das Beispiel veranschaulicht dies anhand einer Windows-Anwendung.

Beispiel

Im Beispiel wird eine Windows-Anwendung gestartet, die die im System definierten Zeitzonen in einem Listenfeld anzeigt. Im Beispiel wird anschließend ein Dialogfeld angezeigt, das den Wert der DisplayName-Eigenschaft des Zeitzonenobjekts enthält, das der Benutzer ausgewählt hat.

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.");
}

Die meisten Listensteuerelemente (z. B. das System.Windows.Forms.ListBox- Steuerelement oder das System.Web.UI.WebControls.BulletedList-Steuerelement) ermöglichen Ihnen, der DataSource-Eigenschaft eine Auflistung von Objektvariablen zuzuweisen, solange diese Auflistung die IEnumerable-Schnittstelle implementiert. (Dies ist beispielsweise bei der allgemeinen ReadOnlyCollection<T>-Klasse der Fall.) Um ein einzelnes Objekt der Auflistung anzuzeigen, ruft das Steuerelement die ToString-Methode des Objekts auf, um die Zeichenfolge, die das Objekt repräsentiert, zu extrahieren. Bei TimeZoneInfo-Objekten gibt die ToString-Methode den Anzeigenamen des TimeZoneInfo-Objekts zurück (der Wert seiner DisplayName-Eigenschaft).

Hinweis:

Da Listensteuerelemente die ToString-Methode eines Objekts aufrufen, können Sie dem Steuerelement eine Auflistung von TimeZoneInfo-Objekten zuweisen, im Steuerelement einen aussagekräftigen Namen für die einzelnen Objekte anzeigen und das TimeZoneInfo-Objekt abrufen, das der Benutzer ausgewählt hat. Hierdurch entfällt die Notwendigkeit, eine Zeichenfolge für jedes Objekt in der Auflistung zu extrahieren, die Zeichenfolge einer Auflistung zuzuweisen, die wiederum der DataSource-Eigenschaft des Steuerelements zugewiesen wird, die vom Benutzer ausgewählte Zeichenfolge abzurufen und diese Zeichenfolge anschließend zum Extrahieren des beschriebenen Objekts zu verwenden.

Kompilieren des Codes

Für dieses Beispiel ist Folgendes erforderlich:

Siehe auch

Aufgaben

Gewusst wie: Speichern von Zeitzonen in einer eingebetteten Ressource

Gewusst wie: Wiederherstellen von Zeitzonen aus einer eingebetteten Ressource

Weitere Ressourcen

Uhrzeiten und Zeitzonen