Freigeben über


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

  1. Verwenden Sie die static (Shared in Visual Basic) TimeZoneInfo.Utc-Eigenschaft zum Zugreifen auf die koordinierte Weltzeit (Coordinated Universal Time, UTC).

  2. 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

  1. Verwenden Sie die static (Shared in Visual Basic) TimeZoneInfo.Local-Eigenschaft zum Zugreifen auf die Zeitzone des lokalen Systems.

  2. 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

Weitere Ressourcen

Uhrzeiten und Zeitzonen