Vorgehensweise: Zugreifen auf die vordefinierte UTC und lokale Zeitzonenobjekte

Die Klasse TimeZoneInfo verfügt über zwei Eigenschaften, Utc und Local, die Ihrem Code den Zugriff auf vordefinierte Zeitzonenobjekte ermöglichen. In diesem Thema wird der Zugriff auf die TimeZoneInfo-Objekte erläutert, die von diesen Eigenschaften zurückgegeben werden.

So greifen Sie auf das TimeZoneInfo-Objekt für die koordinierte Weltzeit (UTC) zu

  1. Verwenden Sie die static-Eigenschaft (Shared in Visual Basic) TimeZoneInfo.Utc für den Zugriff auf koordinierte Weltzeit.

  2. Anstatt das von der Eigenschaft zurückgegebene TimeZoneInfo-Objekt einer Objektvariablen zuzuweisen, fahren Sie fort, indem Sie mit der TimeZoneInfo.Utc-Eigenschaft auf die koordinierte Weltzeit zugreifen.

So greifen Sie auf die lokale Zeitzone zu

  1. Verwenden Sie die static (Shared in Visual Basic) TimeZoneInfo.Local-Eigenschaft, um auf die lokale Systemzeitzone zuzugreifen.

  2. Anstatt das von der Eigenschaft zurückgegebene TimeZoneInfo-Objekt einer Objektvariablen zuzuweisen, fahren Sie fort, indem Sie mit der TimeZoneInfo.Local-Eigenschaft auf die lokale Zeitzone zugreifen.

Beispiel

Im folgenden Code werden die Eigenschaften TimeZoneInfo.Local und TimeZoneInfo.Utc verwendet, um eine Uhrzeit aus der US-amerikanischen und kanadischen Eastern Normalzeit zu konvertieren, sowie den Namen der Zeitzone auf der Konsole anzuzeigen.

// 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 {timeZoneName} zone cannot be found in the registry.");
}
catch (InvalidTimeZoneException)
{
    Console.WriteLine("The registry contains invalid data for the {timeZoneName} zone.");
}

// The example produces the following output to the console:
//    At 1/1/2007 12:00:00 AM (UTC-05:00) Eastern Time (US & Canada), the local time is 1/1/2007 12:00:00 AM Eastern Standard Time.
//    At 1/1/2007 12:00:00 AM (UTC-05:00) Eastern Time (US & Canada), the time is 1/1/2007 5:00:00 AM UTC.

' 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

Sie sollten immer über die TimeZoneInfo.Local-Eigenschaft auf die lokale Zeitzone zugreifen, anstatt die lokale Zeitzone einer TimeZoneInfo-Objektvariablen zuzuweisen. Ebenso sollten Sie stets mit derTimeZoneInfo.Utc- Eigenschaft auf die koordinierte Weltzeit zugreifen, anstatt die UTC-Zone einer TimeZoneInfo-Objektvariablen zuzuweisen. Dadurch wird verhindert, dass die TimeZoneInfo-Objektvariable durch einen Aufruf der TimeZoneInfo.ClearCachedData-Methode ungültig wird.

Weitere Informationen