Gewusst wie: Abrufen eines TimeZoneInfo-Objekts
Die gängigste Methode zum Abrufen eines TimeZoneInfo-Objekts ist es, 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 die Registrierung sieht. Verarbeiten Sie alle Ausnahmen, die von der Methode ausgelöst werden, insbesondere die TimeZoneNotFoundException-Ausnahme, die ausgelöst wird, wenn die Zeitzone nicht in der Registrierung definiert ist.
Hinweis
Ab .NET 8 gibt TimeZoneInfo.FindSystemTimeZoneById ein zwischengespeichertes TimeZoneInfo-Objekt zurück, anstatt ein neues 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 Zeitzone "Eastern Standard Time" darstellt und die der Ortszeit entsprechende "Eastern Standard Time" anzeigt.
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 einzige Parameter der Methode, TimeZoneInfo.FindSystemTimeZoneById , ist der Bezeichner der Zeitzone, die abgerufen werden soll; er entspricht der TimeZoneInfo.Id -Eigenschaft des Objekts. 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 dazugehörige Wert der StandardName -Eigenschaft eines TimeZoneInfo -Objekts, das zum Bereitstellen des Namens der Standardzeit für die Zeitzone verwendet wird. Es gibt jedoch auch Ausnahmen. Die beste Möglichkeit, um sicherzustellen, dass Sie einen gültigen Bezeichner angeben, besteht darin, die auf Ihrem System verfügbaren Zeitzonen aufzulisten und die Bezeichner der darin enthaltenen Zeitzonen zur Kenntnis zu nehmen. Eine Veranschaulichung finden Sie unter How to: Enumerate time zones present on a computer. Der Artikel Suchen der in einem lokalen System definierten Zeitzonen enthält auch eine Liste ausgewählter Zeitzonenbezeichner.
Wenn die Zeitzone gefunden wird, gibt die Methode das zugehörige TimeZoneInfo -Objekt zurück. Wenn die Zeitzone nicht gefunden wird, löst die Methode eine TimeZoneNotFoundExceptionaus. Wenn die Zeitzone gefunden wird, aber die zugehörigen Daten beschädigt oder unvollständig sind, löst die Methode eine InvalidTimeZoneExceptionaus.
Wenn Ihre Anwendung eine Zeitzone benötigt, die vorhanden sein muss, sollten Sie zuerst die FindSystemTimeZoneById -Methode aufrufen, um die Zeitzonendaten aus der Registrierung abzurufen. Wenn der Methodenaufruf fehlschlägt, sollte der Ausnahmehandler dann eine neue Instanz der Zeitzone erstellen oder diese durch Deserialisieren eines serialisierten TimeZoneInfo -Objekts neu erstellen. Ein Beispiel finden Sie unter Vorgehensweise: Wiederherstellen von Zeitzonen aus einer eingebetteten Ressource.