Freigeben über


Anleitung: Abrufen eines TimeZoneInfo-Objekts

Die am häufigsten verwendete Methode zum Abrufen eines TimeZoneInfo Objekts besteht darin, Informationen darüber aus der Registrierung abzurufen. Rufen Sie zum Abrufen des Objekts die static (Shared in Visual Basic) TimeZoneInfo.FindSystemTimeZoneById -Methode auf, die in der Registrierung aussieht. Behandeln Sie alle Ausnahmen, die von der Methode ausgelöst werden, insbesondere TimeZoneNotFoundException, wenn die Zeitzone nicht in der Registrierung definiert ist.

Hinweis

Ab .NET 8 gibt TimeZoneInfo.FindSystemTimeZoneById ein zwischengespeichertes Objekt zurück, anstatt ein neues TimeZoneInfo Objekt zu instanziieren. Weitere Informationen finden Sie unter FindSystemTimeZoneById gibt kein neues Objekt zurück.

Beispiel

Der folgende Code ruft ein TimeZoneInfo Objekt ab, das die Eastern Standard Time Zone darstellt, und zeigt die Eastern Standard-Zeit an, die der lokalen Zeit entspricht.

DateTime timeNow = DateTime.Now;
try
{
    TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
    DateTime easternTimeNow = TimeZoneInfo.ConvertTime(
        timeNow,
        TimeZoneInfo.Local,
        easternZone
        );
    Console.WriteLine("{0} {1} corresponds to {2} {3}.",
                      timeNow,
                      TimeZoneInfo.Local.IsDaylightSavingTime(timeNow) ?
                                TimeZoneInfo.Local.DaylightName :
                                TimeZoneInfo.Local.StandardName,
                      easternTimeNow,
                      easternZone.IsDaylightSavingTime(easternTimeNow) ?
                                  easternZone.DaylightName :
                                  easternZone.StandardName);
}
// Handle exception
//
// As an alternative to simply displaying an error message, an alternate Eastern
// Standard Time TimeZoneInfo object could be instantiated here either by restoring
// it from a serialized string or by providing the necessary data to the
// CreateCustomTimeZone method.
catch (TimeZoneNotFoundException)
{
    Console.WriteLine("The Eastern Standard Time Zone cannot be found on the local system.");
}
catch (InvalidTimeZoneException)
{
    Console.WriteLine("The Eastern Standard Time Zone contains invalid or missing data.");
}
catch (SecurityException)
{
    Console.WriteLine("The application lacks permission to read time zone information from the registry.");
}
catch (OutOfMemoryException)
{
    Console.WriteLine("Not enough memory is available to load information on the Eastern Standard Time zone.");
}
// If we weren't passing FindSystemTimeZoneById a literal string, we also
// would handle an ArgumentNullException.
Dim timeNow As Date = Date.Now
Try
    Dim easternZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
    Dim easternTimeNow As Date = TimeZoneInfo.ConvertTime(timeNow, TimeZoneInfo.Local, easternZone)
    Console.WriteLine("{0} {1} corresponds to {2} {3}.", _
                      timeNow, _
                      IIf(TimeZoneInfo.Local.IsDaylightSavingTime(timeNow), _
                          TimeZoneInfo.Local.DaylightName, TimeZoneInfo.Local.StandardName), _
                      easternTimeNow, _
                      IIf(easternZone.IsDaylightSavingTime(easternTimeNow), _
                          easternZone.DaylightName, easternZone.StandardName))
    ' Handle exception
    '
    ' As an alternative to simply displaying an error message, an alternate Eastern
    ' Standard Time TimeZoneInfo object could be instantiated here either by restoring
    ' it from a serialized string or by providing the necessary data to the
    ' CreateCustomTimeZone method.
Catch e As TimeZoneNotFoundException
    Console.WriteLine("The Eastern Standard Time Zone cannot be found on the local system.")
Catch e As InvalidTimeZoneException
    Console.WriteLine("The Eastern Standard Time Zone contains invalid or missing data.")
Catch e As SecurityException
    Console.WriteLine("The application lacks permission to read time zone information from the registry.")
Catch e As OutOfMemoryException
    Console.WriteLine("Not enough memory is available to load information on the Eastern Standard Time zone.")
    ' If we weren't passing FindSystemTimeZoneById a literal string, we also 
    ' would handle an ArgumentNullException.
End Try

Der TimeZoneInfo.FindSystemTimeZoneById einzelne Parameter der Methode ist der Bezeichner der Zeitzone, die Sie abrufen möchten, was der Eigenschaft des TimeZoneInfo.Id Objekts entspricht. Der Zeitzonenbezeichner ist ein Schlüsselfeld, das die Zeitzone eindeutig identifiziert. Während die meisten Schlüssel relativ kurz sind, ist der Zeitzonenbezeichner vergleichsweise lang. In den meisten Fällen entspricht der Wert der StandardName Eigenschaft eines TimeZoneInfo Objekts, das verwendet wird, um den Namen der Standardzeit der Zeitzone anzugeben. Es gibt jedoch auch Ausnahmen. Die beste Möglichkeit, um sicherzustellen, dass Sie einen gültigen Bezeichner angeben, besteht darin, die in Ihrem System verfügbaren Zeitzonen aufzulisten und die Bezeichner der darin vorhandenen Zeitzonen zu notieren. Ein Beispiel finden Sie unter Wie man: Zeitzonen auf einem Computer auflistet. Das Auffinden der Zeitzonen, die auf einem lokalen System definiert sind enthält auch eine Liste ausgewählter Zeitzonenbezeichner.

Wenn die Zeitzone gefunden wird, gibt die Methode ihr TimeZoneInfo Objekt zurück. Wenn die Zeitzone nicht gefunden wird, löst die Methode eine TimeZoneNotFoundException. Wenn die Zeitzone gefunden wird, ihre Daten aber beschädigt oder unvollständig sind, löst die Methode eine InvalidTimeZoneException aus.

Wenn Ihre Anwendung auf eine Zeitzone angewiesen ist, die vorhanden sein muss, sollten Sie zuerst die FindSystemTimeZoneById Methode aufrufen, um die Zeitzoneninformationen aus der Registrierung abzurufen. Wenn der Methodenaufruf fehlschlägt, sollte die Ausnahmebehandlungsroutine entweder eine neue Instanz der Zeitzone erstellen oder eine neue Instanz aus einem serialisierten TimeZoneInfo Objekt durch Deserialisierung erstellen. Siehe Vorgehensweise: Wiederherstellen von Zeitzonen aus einer eingebetteten Ressource für ein Beispiel.

Siehe auch