Freigeben über


Vorgehensweise: Aufzählen von Zeitzonen, die auf einem Computer vorhanden sind

Das erfolgreiche Arbeiten mit einer bestimmten Zeitzone erfordert, dass Informationen zu dieser Zeitzone für das System verfügbar sind. Die Betriebssysteme Windows XP und Windows Vista speichern diese Informationen in der Registrierung. Obwohl die Gesamtzahl der Zeitzonen, die in der ganzen Welt vorhanden sind, groß ist, enthält die Registrierung Informationen nur über eine Teilmenge davon. Darüber hinaus ist die Registrierung selbst eine dynamische Struktur, deren Inhalte sowohl absichtlichen als auch versehentlichen Änderungen unterliegen. Daher kann eine Anwendung nicht immer davon ausgehen, dass eine bestimmte Zeitzone definiert und auf einem System verfügbar ist. Der erste Schritt für viele Anwendungen, die Zeitzoneninformationsanwendungen verwenden, besteht darin, zu bestimmen, ob erforderliche Zeitzonen im lokalen System verfügbar sind, oder dem Benutzer eine Liste der Zeitzonen zur Auswahl zu geben. Dies erfordert, dass eine Anwendung die zeitzonen aufzählt, die in einem lokalen System definiert sind.

Hinweis

Wenn eine Anwendung auf das Vorhandensein einer bestimmten Zeitzone angewiesen ist, die möglicherweise nicht auf einem lokalen System definiert ist, kann die Anwendung ihre Anwesenheit sicherstellen, indem Sie Informationen zur Zeitzone serialisieren und deserialisieren. Die Zeitzone kann dann einem Listensteuerelement hinzugefügt werden, damit der Anwendungsbenutzer es auswählen kann. Ausführliche Informationen finden Sie unter "So geht's: Zeitzonen in eine eingebettete Ressource speichern" und "So geht's: Zeitzonen aus einer eingebetteten Ressource wiederherstellen".

So listen Sie die im lokalen System vorhandenen Zeitzonen auf

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

    ReadOnlyCollection<TimeZoneInfo> tzCollection;
    tzCollection = TimeZoneInfo.GetSystemTimeZones();
    
    Dim tzCollection As ReadOnlyCollection(Of TimeZoneInfo) = TimeZoneInfo.GetSystemTimeZones
    
  2. Zählen Sie die einzelnen TimeZoneInfo Objekte in der Auflistung mithilfe einer foreach-Schleife (in C#) oder einer For Each auf. Next Schleife (in Visual Basic) und ausführen alle erforderlichen Verarbeitungen für jedes Objekt. Der folgende Code listet beispielsweise die ReadOnlyCollection<T> Auflistung der TimeZoneInfo in Schritt 1 zurückgegebenen Objekte auf und listet den Anzeigenamen jeder Zeitzone auf der Konsole auf.

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

So stellen Sie dem Benutzer eine Liste der Zeitzonen vor, die im lokalen System vorhanden sind

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

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

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

Das Beispiel stellt eine Abbildung für eine Windows-Anwendung bereit.

Beispiel

Im Beispiel wird eine Windows-Anwendung gestartet, in der die in einem System definierten Zeitzonen in einem Listenfeld angezeigt werden. Im Beispiel wird dann ein Dialogfeld angezeigt, das den Wert der DisplayName Eigenschaft des vom Benutzer ausgewählten Zeitzonenobjekts enthält.

private void Form1_Load(object sender, EventArgs e)
{
    ReadOnlyCollection<TimeZoneInfo> tzCollection;
    tzCollection = TimeZoneInfo.GetSystemTimeZones();
    _timeZoneList.DataSource = tzCollection;
}

private void OkButton_Click(object sender, EventArgs e)
{
    TimeZoneInfo? selectedTimeZone = (TimeZoneInfo?)_timeZoneList.SelectedItem;
    MessageBox.Show($"You selected the {selectedTimeZone?.ToString()} time zone.");
}
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

Mit den meisten Listensteuerelementen (z. B. dem System.Windows.Forms.ListBoxSystem.Web.UI.WebControls.BulletedList Steuerelement) können Sie ihrer DataSource Eigenschaft eine Auflistung von Objektvariablen zuweisen, solange diese Auflistung die IEnumerable Schnittstelle implementiert. (Die generische ReadOnlyCollection<T> Klasse führt dies aus.) Zum Anzeigen eines einzelnen Objekts in der Auflistung ruft das Steuerelement die Methode dieses ToString Objekts auf, um die Zeichenfolge zu extrahieren, die zum Darstellen des Objekts verwendet wird. Bei TimeZoneInfo Objekten gibt die ToString-Methode den Anzeigenamen des TimeZoneInfo Objekts (den Wert seiner DisplayName-Eigenschaft) zurück.

Hinweis

Da Listensteuerelemente die Methode eines Objekts ToString aufrufen, können Sie dem Steuerelement eine Auflistung von TimeZoneInfo Objekten zuweisen, das Steuerelement einen aussagekräftigen Namen für jedes Objekt anzeigen und das TimeZoneInfo objekt abrufen, das der Benutzer ausgewählt hat. Dadurch ist es nicht erforderlich, eine Zeichenfolge für jedes Objekt in der Auflistung zu extrahieren, die Zeichenfolge einer Auflistung zuzuweisen, die wiederum der Eigenschaft des Steuerelements DataSource zugewiesen ist, die Zeichenfolge abzurufen, die der Benutzer ausgewählt hat, und verwenden Sie dann diese Zeichenfolge, um das objekt zu extrahieren, das es beschreibt.

Kompilieren des Codes

In diesem Beispiel ist Folgendes erforderlich:

Siehe auch