Konvertieren von Uhrzeiten zwischen ZeitzonenConverting times between time zones

Es wird immer wichtiger, dass Anwendungen, die mit Daten und Uhrzeiten arbeiten, Unterschiede zwischen Zeitzonen verarbeiten können.It is becoming increasingly important for any application that works with dates and times to handle differences between time zones. Eine Anwendung kann nicht mehr davon ausgehen, dass alle Uhrzeiten in der Ortszeit ausgedrückt werden können. Dies ist die Zeit, die in der Struktur verfügbar ist DateTime .An application can no longer assume that all times can be expressed in the local time, which is the time available from the DateTime structure. Eine Webseite beispielsweise, die die aktuelle Uhrzeit für die Ostküste der USA anzeigt, wird für Kunden in Ostasien an Glaubwürdigkeit verlieren.For example, a Web page that displays the current time in the eastern part of the United States will lack credibility to a customer in eastern Asia. In diesem Thema wird erläutert, wie Sie Uhrzeiten von einer Zeitzone in eine andere konvertieren können, und wie Sie DateTimeOffset Werte mit eingeschränkter Zeit Zonen Bekanntheit konvertieren.This topic explains how to convert times from one time zone to another, as well as how to convert DateTimeOffset values that have limited time zone awareness.

Konvertieren in die koordinierte WeltzeitConverting to Coordinated Universal Time

Die koordinierte Weltzeit (UTC, Coordinated Universal Time) ist ein auf der Atomzeit basierender, höchst präziser Zeitstandard.Coordinated Universal Time (UTC) is a high-precision, atomic time standard. Die Zeitzonen der Welt werden als positive oder negative Offsets von UTC ausgedrückt.The world's time zones are expressed as positive or negative offsets from UTC. Daher ist die UTC sozusagen eine zeitzonenfreie bzw. zeitzonenneutrale Zeit.Thus, UTC provides a kind of time-zone free or time-zone neutral time. Die Verwendung der UTC wird empfohlen, wenn die computerübergreifende Portabilität von Datum und Uhrzeit von großer Bedeutung ist.The use of UTC time is recommended when a date and time's portability across computers is important. (Ausführliche Informationen und weitere bewährte Methoden zum Verwenden von Datums-und Uhrzeitangaben finden Sie unter Programmieren bewährter Methoden mithilfe von DateTime in der .NET Framework.) Durch das umrechnen einzelner Zeitzonen in die UTC werden Zeit Vergleiche leicht.(For details and other best practices using dates and times, see Coding best practices using DateTime in the .NET Framework.) Converting individual time zones to UTC makes time comparisons easy.

Hinweis

Sie können auch eine Struktur serialisieren DateTimeOffset , um einen bestimmten Zeitpunkt eindeutig darzustellen.You can also serialize a DateTimeOffset structure to unambiguously represent a single point in time. Da- DateTimeOffset Objekte einen Datums-und Uhrzeitwert zusammen mit dem Offset von der UTC speichern, stellen Sie immer einen bestimmten Zeitpunkt in Beziehung zu UTC dar.Because DateTimeOffset objects store a date and time value along with its offset from UTC, they always represent a particular point in time in relationship to UTC.

Die einfachste Möglichkeit, eine Uhrzeit in die UTC zu konvertieren, besteht darin, die- static Shared Methode (in Visual Basic) aufzurufen TimeZoneInfo.ConvertTimeToUtc(DateTime) .The easiest way to convert a time to UTC is to call the static (Shared in Visual Basic) TimeZoneInfo.ConvertTimeToUtc(DateTime) method. Die genaue Konvertierung, die von der-Methode durchgeführt wird, hängt vom Wert der dateTime -Eigenschaft des-Parameters ab Kind , wie in der folgenden Tabelle gezeigt.The exact conversion performed by the method depends on the value of the dateTime parameter's Kind property, as the following table shows.

DateTime.Kind KonvertierungConversion
DateTimeKind.Local Konvertiert die lokale Zeit in die UTC.Converts local time to UTC.
DateTimeKind.Unspecified Nimmt an, dass der dateTime-Parameter die lokale Zeit angibt, und konvertiert die lokale Zeit in die UTC.Assumes the dateTime parameter is local time and converts local time to UTC.
DateTimeKind.Utc Gibt den dateTime-Parameter unverändert zurück.Returns the dateTime parameter unchanged.

Der folgende Code konvertiert die aktuelle lokale Zeit in die UTC und zeigt das Ergebnis in der Konsole an.The following code converts the current local time to UTC and displays the result to the console.

DateTime dateNow = DateTime.Now;
Console.WriteLine("The date and time are {0} UTC.",
                   TimeZoneInfo.ConvertTimeToUtc(dateNow));
Dim dateNow As Date = Date.Now
Console.WriteLine("The date and time are {0} UTC.", _
                  TimeZoneInfo.ConvertTimeToUtc(dateNow))

Wenn der Datums-und Uhrzeitwert weder die Ortszeit noch UTC darstellt, gibt die ToUniversalTime Methode wahrscheinlich ein falsches Ergebnis zurück.If the date and time value does not represent either the local time or UTC, the ToUniversalTime method will likely return an erroneous result. Sie können jedoch die TimeZoneInfo.ConvertTimeToUtc -Methode verwenden, um das Datum und die Uhrzeit aus einer angegebenen Zeitzone zu konvertieren.However, you can use the TimeZoneInfo.ConvertTimeToUtc method to convert the date and time from a specified time zone. (Ausführliche Informationen zum Abrufen eines- TimeZoneInfo Objekts, das die Ziel Zeitzone darstellt, finden Sie untersuchen der in einem lokalen System definierten Zeitzonen.) Im folgenden Code wird die- TimeZoneInfo.ConvertTimeToUtc Methode verwendet, um die Eastern Standard Time in die UTC zu konvertieren.(For details on retrieving a TimeZoneInfo object that represents the destination time zone, see Finding the time zones defined on a local system.) The following code uses the TimeZoneInfo.ConvertTimeToUtc method to convert Eastern Standard Time to UTC.

DateTime easternTime = new DateTime(2007, 01, 02, 12, 16, 00);
string easternZoneId = "Eastern Standard Time";
try
{
   TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById(easternZoneId);
   Console.WriteLine("The date and time are {0} UTC.",
                     TimeZoneInfo.ConvertTimeToUtc(easternTime, easternZone));
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("Unable to find the {0} zone in the registry.",
                     easternZoneId);
}
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the {0} zone has been corrupted.",
                     easternZoneId);
}
Dim easternTime As New Date(2007, 01, 02, 12, 16, 00)
Dim easternZoneId As String = "Eastern Standard Time"
Try
    Dim easternZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(easternZoneId)
    Console.WriteLine("The date and time are {0} UTC.", _
                      TimeZoneInfo.ConvertTimeToUtc(easternTime, easternZone))
Catch e As TimeZoneNotFoundException
    Console.WriteLine("Unable to find the {0} zone in the registry.", _
                      easternZoneId)
Catch e As InvalidTimeZoneException
    Console.WriteLine("Registry data on the {0} zone has been corrupted.", _
                      easternZoneId)
End Try

Beachten Sie, dass diese Methode einen auslöst, ArgumentException Wenn die DateTime -Eigenschaft des-Objekts Kind und die Zeitzone nicht übereinstimmen.Note that this method throws an ArgumentException if the DateTime object's Kind property and the time zone are mismatched. Ein Konflikt tritt auf, wenn die- Kind Eigenschaft ist DateTimeKind.Local , das- TimeZoneInfo Objekt jedoch nicht die lokale Zeitzone darstellt, oder wenn die- Kind Eigenschaft ist, DateTimeKind.Utc aber das- TimeZoneInfo Objekt nicht gleich ist TimeZoneInfo.Utc .A mismatch occurs if the Kind property is DateTimeKind.Local but the TimeZoneInfo object does not represent the local time zone, or if the Kind property is DateTimeKind.Utc but the TimeZoneInfo object does not equal TimeZoneInfo.Utc.

Alle diese Methoden übernehmen DateTime Werte als Parameter und geben einen DateTime Wert zurück.All of these methods take DateTime values as parameters and return a DateTime value. Für- DateTimeOffset Werte verfügt die- DateTimeOffset Struktur über eine- ToUniversalTime Instanzmethode, die das Datum und die Uhrzeit der aktuellen Instanz in die UTC konvertiert.For DateTimeOffset values, the DateTimeOffset structure has a ToUniversalTime instance method that converts the date and time of the current instance to UTC. Im folgenden Beispiel wird die ToUniversalTime -Methode aufgerufen, um eine lokale Uhrzeit und einige andere Uhrzeiten in die koordinierte Weltzeit (UTC) zu konvertieren.The following example calls the ToUniversalTime method to convert a local time and several other times to Coordinated Universal Time (UTC).

DateTimeOffset localTime, otherTime, universalTime;

// Define local time in local time zone
localTime = new DateTimeOffset(new DateTime(2007, 6, 15, 12, 0, 0));
Console.WriteLine("Local time: {0}", localTime);
Console.WriteLine();

// Convert local time to offset 0 and assign to otherTime
otherTime = localTime.ToOffset(TimeSpan.Zero);
Console.WriteLine("Other time: {0}", otherTime);
Console.WriteLine("{0} = {1}: {2}",
                  localTime, otherTime,
                  localTime.Equals(otherTime));
Console.WriteLine("{0} exactly equals {1}: {2}",
                  localTime, otherTime,
                  localTime.EqualsExact(otherTime));
Console.WriteLine();

// Convert other time to UTC
universalTime = localTime.ToUniversalTime();
Console.WriteLine("Universal time: {0}", universalTime);
Console.WriteLine("{0} = {1}: {2}",
                  otherTime, universalTime,
                  universalTime.Equals(otherTime));
Console.WriteLine("{0} exactly equals {1}: {2}",
                  otherTime, universalTime,
                  universalTime.EqualsExact(otherTime));
Console.WriteLine();
// The example produces the following output to the console:
//    Local time: 6/15/2007 12:00:00 PM -07:00
//
//    Other time: 6/15/2007 7:00:00 PM +00:00
//    6/15/2007 12:00:00 PM -07:00 = 6/15/2007 7:00:00 PM +00:00: True
//    6/15/2007 12:00:00 PM -07:00 exactly equals 6/15/2007 7:00:00 PM +00:00: False
//
//    Universal time: 6/15/2007 7:00:00 PM +00:00
//    6/15/2007 7:00:00 PM +00:00 = 6/15/2007 7:00:00 PM +00:00: True
//    6/15/2007 7:00:00 PM +00:00 exactly equals 6/15/2007 7:00:00 PM +00:00: True
Dim localTime, otherTime, universalTime As DateTimeOffset

' Define local time in local time zone
localTime = New DateTimeOffset(#6/15/2007 12:00:00PM#)
Console.WriteLine("Local time: {0}", localTime)
Console.WriteLine()

' Convert local time to offset 0 and assign to otherTime
otherTime = localTime.ToOffset(TimeSpan.Zero)
Console.WriteLine("Other time: {0}", otherTime)
Console.WriteLine("{0} = {1}: {2}", _
                  localTime, otherTime, _
                  localTime.Equals(otherTime))
Console.WriteLine("{0} exactly equals {1}: {2}", _
                  localTime, otherTime, _
                  localTime.EqualsExact(otherTime))
Console.WriteLine()

' Convert other time to UTC
universalTime = localTime.ToUniversalTime()
Console.WriteLine("Universal time: {0}", universalTime)
Console.WriteLine("{0} = {1}: {2}", _
                  otherTime, universalTime, _
                  universalTime.Equals(otherTime))
Console.WriteLine("{0} exactly equals {1}: {2}", _
                  otherTime, universalTime, _
                  universalTime.EqualsExact(otherTime))
Console.WriteLine()
' The example produces the following output to the console:
'    Local time: 6/15/2007 12:00:00 PM -07:00
'    
'    Other time: 6/15/2007 7:00:00 PM +00:00
'    6/15/2007 12:00:00 PM -07:00 = 6/15/2007 7:00:00 PM +00:00: True
'    6/15/2007 12:00:00 PM -07:00 exactly equals 6/15/2007 7:00:00 PM +00:00: False
'    
'    Universal time: 6/15/2007 7:00:00 PM +00:00
'    6/15/2007 7:00:00 PM +00:00 = 6/15/2007 7:00:00 PM +00:00: True
'    6/15/2007 7:00:00 PM +00:00 exactly equals 6/15/2007 7:00:00 PM +00:00: True   

Konvertieren der UTC in eine festgelegte ZeitzoneConverting UTC to a designated time zone

Informationen zum Konvertieren der UTC in eine lokale Zeit finden Sie im folgenden Abschnitt "Konvertieren der UTC in eine lokale Zeit".To convert UTC to local time, see the "Converting UTC to Local Time" section that follows. Um die UTC in die Zeit in einer von Ihnen festgelegten Zeitzone zu konvertieren, müssen Sie die-Methode aufzurufen ConvertTimeFromUtc .To convert UTC to the time in any time zone that you designate, call the ConvertTimeFromUtc method. Die Methode akzeptiert zwei Parameter:The method takes two parameters:

  • Die zu konvertierende UTC.The UTC to convert. Dabei muss es sich DateTime um einen Wert handeln, dessen- Kind Eigenschaft auf oder festgelegt ist Unspecified Utc .This must be a DateTime value whose Kind property is set to Unspecified or Utc.

  • Die Zeitzone, in die die UTC konvertiert werden soll.The time zone to convert the UTC to.

Der folgende Code konvertiert die UTC in die Central Standard Time.The following code converts UTC to Central Standard Time.

DateTime timeUtc = DateTime.UtcNow;
try
{
   TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
   DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone);
   Console.WriteLine("The date and time are {0} {1}.",
                     cstTime,
                     cstZone.IsDaylightSavingTime(cstTime) ?
                             cstZone.DaylightName : cstZone.StandardName);
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the Central Standard Time zone.");
}
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the Central Standard Time zone has been corrupted.");
}
Dim timeUtc As Date = Date.UtcNow
Try
    Dim cstZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")
    Dim cstTime As Date = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, cstZone)
    Console.WriteLine("The date and time are {0} {1}.", _
                      cstTime, _
                      IIf(cstZone.IsDaylightSavingTime(cstTime), _
                          cstZone.DaylightName, cstZone.StandardName))
Catch e As TimeZoneNotFoundException
    Console.WriteLine("The registry does not define the Central Standard Time zone.")
Catch e As InvalidTimeZoneException
    Console.WriteLine("Registry data on the Central Standard Time zone has been corrupted.")
End Try

Konvertieren der UTC in eine lokale ZeitConverting UTC to local time

Um die UTC in die lokale Zeit zu konvertieren, müssen Sie die-Methode des-Objekts aufzurufen, ToLocalTime DateTime dessen Zeit Sie konvertieren möchten.To convert UTC to local time, call the ToLocalTime method of the DateTime object whose time you want to convert. Das genaue Verhalten der-Methode hängt vom Wert der-Eigenschaft des-Objekts ab Kind , wie in der folgenden Tabelle gezeigt.The exact behavior of the method depends on the value of the object's Kind property, as the following table shows.

DateTime.Kind KonvertierungConversion
DateTimeKind.Local Gibt den DateTime Wert unverändert zurück.Returns the DateTime value unchanged.
DateTimeKind.Unspecified Geht davon aus, dass der DateTime Wert UTC ist, und konvertiert die UTC in die lokale Zeit.Assumes that the DateTime value is UTC and converts the UTC to local time.
DateTimeKind.Utc Konvertiert den DateTime Wert in die lokale Zeit.Converts the DateTime value to local time.

Hinweis

Die- TimeZone.ToLocalTime Methode verhält sich identisch mit der- DateTime.ToLocalTime Methode.The TimeZone.ToLocalTime method behaves identically to the DateTime.ToLocalTime method. Er nimmt einen einzelnen Parameter an, der den zu konvertierenden Datums-und Uhrzeitwert ist.It takes a single parameter, which is the date and time value to convert.

Mithilfe der static ( Shared in Visual Basic)-Methode können Sie auch die Zeit in einer bestimmten Zeitzone in lokale Zeit konvertieren TimeZoneInfo.ConvertTime .You can also convert the time in any designated time zone to local time by using the static (Shared in Visual Basic) TimeZoneInfo.ConvertTime method. Diese Vorgehensweise wird im nächsten Abschnitt erläutert.This technique is discussed in the next section.

Konvertieren zwischen zwei beliebigen ZeitzonenConverting between any two time zones

Sie können zwischen zwei beliebigen Zeitzonen konvertieren, indem Sie eine der beiden folgenden static Methoden ( Shared in Visual Basic) der- TimeZoneInfo Klasse verwenden:You can convert between any two time zones by using either of the following two static (Shared in Visual Basic) methods of the TimeZoneInfo class:

  • ConvertTime

    Die Parameter dieser Methode sind der zu konvertierende Datums-und Uhrzeitwert, ein TimeZoneInfo -Objekt, das die Zeitzone des Datums-und Uhrzeitwerts darstellt, und ein- TimeZoneInfo Objekt, das die Zeitzone darstellt, in die der Datums-und Uhrzeitwert konvertiert werden soll.This method's parameters are the date and time value to convert, a TimeZoneInfo object that represents the time zone of the date and time value, and a TimeZoneInfo object that represents the time zone to convert the date and time value to.

  • ConvertTimeBySystemTimeZoneId

    Die Parameter dieser Methode sind der zu konvertierende Datums-und Uhrzeitwert, der Bezeichner für die Zeitzone des Datums-und Uhrzeitwerts und der Bezeichner der Zeitzone, in die der Datums-und Uhrzeitwert konvertiert werden soll.This method's parameters are the date and time value to convert, the identifier of the date and time value's time zone, and the identifier of the time zone to convert the date and time value to.

Beide Methoden erfordern, dass die Kind -Eigenschaft des zu konvertierenden Datums-und Uhrzeitwerts und der TimeZoneInfo Objekt-oder Zeit Zonen Bezeichner, der die Zeitzone darstellt, einander entsprechen.Both methods require that the Kind property of the date and time value to convert and the TimeZoneInfo object or time zone identifier that represents its time zone correspond to one another. Andernfalls wird eine ArgumentException ausgelöst.Otherwise, an ArgumentException is thrown. Wenn beispielsweise die Kind -Eigenschaft des Datums-und Uhrzeitwerts ist DateTimeKind.Local , wird eine-Ausnahme ausgelöst, wenn das Objekt, das TimeZoneInfo als Parameter an die-Methode übergeben wurde, nicht gleich ist TimeZoneInfo.Local .For example, if the Kind property of the date and time value is DateTimeKind.Local, an exception is thrown if the TimeZoneInfo object passed as a parameter to the method is not equal to TimeZoneInfo.Local. Eine Ausnahme wird auch ausgelöst, wenn der als Parameter an die Methode übergebene Bezeichner nicht gleich ist TimeZoneInfo.Local.Id .An exception is also thrown if the identifier passed as a parameter to the method is not equal to TimeZoneInfo.Local.Id.

Im folgenden Beispiel wird die- ConvertTime Methode verwendet, um von der Hawaii-Standard Zeit in die lokale Uhrzeit zu konvertieren.The following example uses the ConvertTime method to convert from Hawaiian Standard Time to local time.

DateTime hwTime = new DateTime(2007, 02, 01, 08, 00, 00);
try
{
   TimeZoneInfo hwZone = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
   Console.WriteLine("{0} {1} is {2} local time.",
           hwTime,
           hwZone.IsDaylightSavingTime(hwTime) ? hwZone.DaylightName : hwZone.StandardName,
           TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local));
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.");
}
catch (InvalidTimeZoneException)
{
   Console.WriteLine("Registry data on the Hawaiian Standard Time zone has been corrupted.");
}
Dim hwTime As Date = #2/01/2007 8:00:00 AM#
Try
    Dim hwZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time")
    Console.WriteLine("{0} {1} is {2} local time.", _
                      hwTime, _
                      IIf(hwZone.IsDaylightSavingTime(hwTime), hwZone.DaylightName, hwZone.StandardName), _
                      TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local))
Catch e As TimeZoneNotFoundException
    Console.WriteLine("The registry does not define the Hawaiian Standard Time zone.")
Catch e As InvalidTimeZoneException
    Console.WriteLine("Registry data on the Hawaiian Standard Time zone has been corrupted.")
End Try

Konvertieren von DateTimeOffset-WertenConverting DateTimeOffset values

Datums-und Uhrzeitwerte, die durch- DateTimeOffset Objekte dargestellt werden, sind nicht vollständig Zeit Zonen fähig, da das-Objekt zu dem Zeitpunkt, zu dem er instanziiert wird, von der Zeitzone getrennt wird.Date and time values represented by DateTimeOffset objects are not fully time-zone aware because the object is disassociated from its time zone at the time it is instantiated. In vielen Fällen muss eine Anwendung jedoch einfach nur ein Datum und eine Uhrzeit basierend auf zwei verschiedenen Abweichungen von der UTC konvertieren, nicht basierend auf der Uhrzeit in bestimmten Zeitzonen.However, in many cases an application simply needs to convert a date and time based on two different offsets from UTC rather than on the time in particular time zones. Um diese Konvertierung auszuführen, können Sie die-Methode der aktuellen Instanz von aufzurufen ToOffset .To perform this conversion, you can call the current instance's ToOffset method. Der einzige Parameter der Methode ist der Offset des neuen Datums-und Uhrzeitwerts, der von der Methode zurückgegeben werden soll.The method's single parameter is the offset of the new date and time value that the method is to return.

Wenn Datum und Uhrzeit einer Benutzeranforderung für eine Webseite bekannt sind und als Zeichenfolge im Format MM/dd/yyyy hh:mm:ss zzzz serialisiert wurden, konvertiert die folgende ReturnTimeOnServer-Methode diesen Datums- und Uhrzeitwert in das Datum und die Uhrzeit des Webservers.For example, if the date and time of a user request for a Web page is known and is serialized as a string in the format MM/dd/yyyy hh:mm:ss zzzz, the following ReturnTimeOnServer method converts this date and time value to the date and time on the Web server.

public DateTimeOffset ReturnTimeOnServer(string clientString)
{
   string format = @"M/d/yyyy H:m:s zzz";
   TimeSpan serverOffset = TimeZoneInfo.Local.GetUtcOffset(DateTimeOffset.Now);

   try
   {
      DateTimeOffset clientTime = DateTimeOffset.ParseExact(clientString, format, CultureInfo.InvariantCulture);
      DateTimeOffset serverTime = clientTime.ToOffset(serverOffset);
      return serverTime;
   }
   catch (FormatException)
   {
      return DateTimeOffset.MinValue;
   }
}
Public Function ReturnTimeOnServer(clientString As String) As DateTimeOffset
    Dim format As String = "M/d/yyyy H:m:s zzz"
    Dim serverOffset As TimeSpan = TimeZoneInfo.Local.GetUtcOffset(DateTimeOffset.Now)

    Try
        Dim clientTime As DateTimeOffset = DateTimeOffset.ParseExact(clientString, format, CultureInfo.InvariantCulture)
        Dim serverTime As DateTimeOffset = clientTime.ToOffset(serverOffset)
        Return serverTime
    Catch e As FormatException
        Return DateTimeOffset.MinValue
    End Try
End Function

Wenn der-Methode die Zeichenfolge "9/1/2007 5:32:07 -05:00", die das Datum und die Uhrzeit in einer Zeitzone von fünf Stunden vor der UTC darstellt, an die-Methode zurückgegeben wird, gibt Sie 9/1/2007 3:32:07 am-07:00 für einen Server zurück, der sich in der US Pacific Standard Time Zone befindet.If the method is passed the string "9/1/2007 5:32:07 -05:00", which represents the date and time in a time zone five hours earlier than UTC, it returns 9/1/2007 3:32:07 AM -07:00 for a server located in the U.S. Pacific Standard Time zone.

Die- TimeZoneInfo Klasse enthält auch eine Überladung der- TimeZoneInfo.ConvertTime(DateTimeOffset, TimeZoneInfo) Methode, die Zeit Zonen Konvertierungen mit- ToOffset(TimeSpan) Werten ausführt.The TimeZoneInfo class also includes an overload of the TimeZoneInfo.ConvertTime(DateTimeOffset, TimeZoneInfo) method that performs time zone conversions with ToOffset(TimeSpan) values. Die Parameter der Methode sind ein DateTimeOffset Wert und ein Verweis auf die Zeitzone, in die die Uhrzeit konvertiert werden soll.The method's parameters are a DateTimeOffset value and a reference to the time zone to which the time is to be converted. Der Methoden Aufrufwert gibt einen- DateTimeOffset Wert zurück.The method call returns a DateTimeOffset value. Die- ReturnTimeOnServer Methode im vorherigen Beispiel könnte z. b. wie folgt umgeschrieben werden, um die-Methode aufzurufen ConvertTime(DateTimeOffset, TimeZoneInfo) .For example, the ReturnTimeOnServer method in the previous example could be rewritten as follows to call the ConvertTime(DateTimeOffset, TimeZoneInfo) method.

public DateTimeOffset ReturnTimeOnServer(string clientString)
{
   string format = @"M/d/yyyy H:m:s zzz";

   try
   {
      DateTimeOffset clientTime = DateTimeOffset.ParseExact(clientString, format,
                                  CultureInfo.InvariantCulture);
      DateTimeOffset serverTime = TimeZoneInfo.ConvertTime(clientTime,
                                  TimeZoneInfo.Local);
      return serverTime;
   }
   catch (FormatException)
   {
      return DateTimeOffset.MinValue;
   }
}
Public Function ReturnTimeOnServer(clientString As String) As DateTimeOffset
    Dim format As String = "M/d/yyyy H:m:s zzz"

    Try
        Dim clientTime As DateTimeOffset = DateTimeOffset.ParseExact(clientString, format, CultureInfo.InvariantCulture)
        Dim serverTime As DateTimeOffset = TimeZoneInfo.ConvertTime(clientTime, TimeZoneInfo.Local)
        Return serverTime
    Catch e As FormatException
        Return DateTimeOffset.MinValue
    End Try
End Function

Siehe auchSee also