Gewusst wie: Zugreifen auf die vordefinierte UTC und lokale Zeitzonenobjekte
Aktualisiert: November 2007
Die TimeZoneInfo-Klasse verfügt über zwei Eigenschaften, Utc und Local, mit denen der Code auf vordefinierte Zeitzonenobjekte zugreifen kann. In diesem Thema wird erläutert, wie auf die TimeZoneInfo-Objekte zugegriffen wird, die von diesen Eigenschaften zurückgegeben werden.
So greifen Sie auf das TimeZoneInfo-Objekt der koordinierten Weltzeit (Coordinated Universal Time, UTC) zu
Verwenden Sie die static (Shared in Visual Basic) TimeZoneInfo.Utc-Eigenschaft zum Zugreifen auf die koordinierte Weltzeit (Coordinated Universal Time, UTC).
Statt das von der Eigenschaft zurückgegebene TimeZoneInfo-Objekt einer Objektvariablen zuzuweisen, sollten Sie weiterhin über die TimeZoneInfo.Utc-Eigenschaft auf die koordinierte Weltzeit (UTC) zugreifen.
So greifen Sie auf die lokale Zeitzone zu
Verwenden Sie die static (Shared in Visual Basic) TimeZoneInfo.Local-Eigenschaft zum Zugreifen auf die Zeitzone des lokalen Systems.
Statt das von der Eigenschaft zurückgegebene TimeZoneInfo-Objekt einer Objektvariablen zuzuweisen, sollten Sie weiterhin über die TimeZoneInfo.Local-Eigenschaft auf die lokale Zeitzone zugreifen.
Beispiel
Im folgenden Code werden die TimeZoneInfo.Local-Eigenschaft und die TimeZoneInfo.Utc-Eigenschaft zum Konvertieren einer Uhrzeit aus den Eastern Normalzeit-Zeitzonen in den USA und Kanada sowie zum Anzeigen des Zeitzonennamens in der Konsole verwendet.
' Create Eastern Standard Time value and TimeZoneInfo object
Dim estTime As Date = #01/01/2007 00:00:00#
Dim timeZoneName As String = "Eastern Standard Time"
Try
Dim est As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName)
' Convert EST to local time
Dim localTime As Date = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Local)
Console.WriteLine("At {0} {1}, the local time is {2} {3}.", _
estTime, _
est, _
localTime, _
IIf(TimeZoneInfo.Local.IsDaylightSavingTime(localTime), _
TimeZoneInfo.Local.DaylightName, _
TimeZoneInfo.Local.StandardName))
' Convert EST to UTC
Dim utcTime As Date = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Utc)
Console.WriteLine("At {0} {1}, the time is {2} {3}.", _
estTime, _
est, _
utcTime, _
TimeZoneInfo.Utc.StandardName)
Catch e As TimeZoneNotFoundException
Console.WriteLine("The {0} zone cannot be found in the registry.", _
timeZoneName)
Catch e As InvalidTimeZoneException
Console.WriteLine("The registry contains invalid data for the {0} zone.", _
timeZoneName)
End Try
// Create Eastern Standard Time value and TimeZoneInfo object
DateTime estTime = new DateTime(2007, 1, 1, 00, 00, 00);
string timeZoneName = "Eastern Standard Time";
try
{
TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById(timeZoneName);
// Convert EST to local time
DateTime localTime = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Local);
Console.WriteLine("At {0} {1}, the local time is {2} {3}.",
estTime,
est,
localTime,
TimeZoneInfo.Local.IsDaylightSavingTime(localTime) ?
TimeZoneInfo.Local.DaylightName :
TimeZoneInfo.Local.StandardName);
// Convert EST to UTC
DateTime utcTime = TimeZoneInfo.ConvertTime(estTime, est, TimeZoneInfo.Utc);
Console.WriteLine("At {0} {1}, the time is {2} {3}.",
estTime,
est,
utcTime,
TimeZoneInfo.Utc.StandardName);
}
catch (TimeZoneNotFoundException)
{
Console.WriteLine("The {0} zone cannot be found in the registry.",
timeZoneName);
}
catch (InvalidTimeZoneException)
{
Console.WriteLine("The registry contains invalid data for the {0} zone.",
timeZoneName);
}
Sie sollten immer über die TimeZoneInfo.Local-Eigenschaft auf die lokale Zeitzone zugreifen und nicht die lokale Zeitzone einer TimeZoneInfo-Objektvariablen zuweisen. Sie sollten entsprechend auch immer über die TimeZoneInfo.Utc-Eigenschaft auf die koordinierte Weltzeit (UTC) zugreifen und nicht die UTC-Zone einer TimeZoneInfo-Objektvariablen zuweisen. Dies verhindert, dass die TimeZoneInfo-Objektvariable durch einen Aufruf der TimeZoneInfo.ClearCachedData-Methode ungültig wird.
Kompilieren des Codes
Für dieses Beispiel ist Folgendes erforderlich:
Dem Projekt muss ein Verweis auf System.Core.dll hinzugefügt werden.
Der System-Namespace muss mit der using-Anweisung (in C#-Code erforderlich) importiert werden.
Siehe auch
Aufgaben
Gewusst wie: Instanziieren eines TimeZoneInfo-Objekts
Konzepte
Suchen der auf einem lokalen System definierten Zeitzonen