Konvertieren zwischen DateTime und DateTimeOffsetConverting between DateTime and DateTimeOffset

Obwohl die DateTimeOffset Struktur ein höheres Maß an Zeit Zonen Bewusstsein bietet als die DateTime Struktur, werden DateTime Parameter häufiger in Methoden aufrufen verwendet.Although the DateTimeOffset structure provides a greater degree of time zone awareness than the DateTime structure, DateTime parameters are used more commonly in method calls. Daher ist die Möglichkeit, DateTimeOffset Werte in DateTime Werte und umgekehrt zu konvertieren, besonders wichtig.Because of this, the ability to convert DateTimeOffset values to DateTime values and vice versa is particularly important. In diesem Thema wird gezeigt, wie diese Konvertierungen auf eine Weise durchgeführt werden, bei der so viele Zeitzoneninformationen wie möglich beibehalten werden.This topic shows how to perform these conversions in a way that preserves as much time zone information as possible.

Hinweis

Sowohl die DateTime als auch die DateTimeOffset Typen weisen einige Einschränkungen auf, wenn Sie Zeiten in Zeitzonen darstellen.Both the DateTime and the DateTimeOffset types have some limitations when representing times in time zones. Mit der Kind-Eigenschaft kann DateTime nur koordinierte Weltzeit (UTC) und die lokale Zeitzone des Systems widerspiegeln.With its Kind property, DateTime is able to reflect only Coordinated Universal Time (UTC) and the system's local time zone. DateTimeOffset gibt den Offset einer Uhrzeit von der UTC wieder, aber nicht die tatsächliche Zeitzone, zu der dieser Offset gehört.DateTimeOffset reflects a time's offset from UTC, but it does not reflect the actual time zone to which that offset belongs. Ausführliche Informationen zu Zeitwerten und zur Unterstützung von Zeitzonen finden Sie unter auswählen zwischen DateTime, DateTimeOffset, TimeSpan und TimeZoneInfo.For details about time values and support for time zones, see Choosing Between DateTime, DateTimeOffset, TimeSpan, and TimeZoneInfo.

Konvertierungen von DateTime in DateTimeOffsetConversions from DateTime to DateTimeOffset

Die DateTimeOffset-Struktur bietet zwei äquivalente Möglichkeiten zum Ausführen von DateTime für die DateTimeOffset Konvertierung, die sich für die meisten Konvertierungen eignen:The DateTimeOffset structure provides two equivalent ways to perform DateTime to DateTimeOffset conversion that are suitable for most conversions:

Bei UTC-und lokalen DateTime Werten spiegelt die Offset-Eigenschaft des resultierenden DateTimeOffset Werts genau den UTC-oder lokalen Zeit Zonen Offset wider.For UTC and local DateTime values, the Offset property of the resulting DateTimeOffset value accurately reflects the UTC or local time zone offset. Im folgenden Code wird z. b. eine UTC-Zeit in den entsprechenden DateTimeOffset Wert konvertiert.For example, the following code converts a UTC time to its equivalent DateTimeOffset value.

DateTime utcTime1 = new DateTime(2008, 6, 19, 7, 0, 0);
utcTime1 = DateTime.SpecifyKind(utcTime1, DateTimeKind.Utc);
DateTimeOffset utcTime2 = utcTime1;
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}", 
                  utcTime1, 
                  utcTime1.Kind.ToString(), 
                  utcTime2);
// This example displays the following output to the console:
//    Converted 6/19/2008 7:00:00 AM Utc to a DateTimeOffset value of 6/19/2008 7:00:00 AM +00:00                        
Dim utcTime1 As Date = Date.SpecifyKind(#06/19/2008 7:00AM#, _
                                        DateTimeKind.Utc)
Dim utcTime2 As DateTimeOffset = utcTime1
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}", _
                  utcTime1, _
                  utcTime1.Kind.ToString(), _
                  utcTime2)
' This example displays the following output to the console:
'    Converted 6/19/2008 7:00:00 AM Utc to a DateTimeOffset value of 6/19/2008 7:00:00 AM +00:00                        

In diesem Fall beträgt die Abweichung der utcTime2-Variablen 00:00.In this case, the offset of the utcTime2 variable is 00:00. Entsprechend konvertiert der folgende Code eine lokale Zeit in den entsprechenden DateTimeOffset Wert.Similarly, the following code converts a local time to its equivalent DateTimeOffset value.

DateTime localTime1 = new DateTime(2008, 6, 19, 7, 0, 0);
localTime1 = DateTime.SpecifyKind(localTime1, DateTimeKind.Local);
DateTimeOffset localTime2 = localTime1;
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}", 
                  localTime1, 
                  localTime1.Kind.ToString(), 
                  localTime2);
// This example displays the following output to the console:
//    Converted 6/19/2008 7:00:00 AM Local to a DateTimeOffset value of 6/19/2008 7:00:00 AM -07:00
Dim localTime1 As Date = Date.SpecifyKind(#06/19/2008 7:00AM#, DateTimeKind.Local)
Dim localTime2 As DateTimeOffset = localTime1
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}", _
                  localTime1, _
                  localTime1.Kind.ToString(), _
                  localTime2)
' This example displays the following output to the console:
'    Converted 6/19/2008 7:00:00 AM Local to a DateTimeOffset value of 6/19/2008 7:00:00 AM -07:00

Für DateTime Werte, deren Kind-Eigenschaft DateTimeKind.Unspecifiedist, führen diese beiden Konvertierungs Methoden jedoch zu einem DateTimeOffset Wert, dessen Offset der der lokalen Zeitzone entspricht.However, for DateTime values whose Kind property is DateTimeKind.Unspecified, these two conversion methods produce a DateTimeOffset value whose offset is that of the local time zone. Dies wird im folgenden Beispiel gezeigt, das in der US Pacific Standard Time-Zone ausgeführt wird.This is shown in the following example, which is run in the U.S. Pacific Standard Time zone.

DateTime time1 = new DateTime(2008, 6, 19, 7, 0, 0);  // Kind is DateTimeKind.Unspecified
DateTimeOffset time2 = time1;
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}", 
                  time1, 
                  time1.Kind.ToString(), 
                  time2);
// This example displays the following output to the console:
//    Converted 6/19/2008 7:00:00 AM Unspecified to a DateTimeOffset value of 6/19/2008 7:00:00 AM -07:00
Dim time1 As Date = #06/19/2008 7:00AM#      ' Kind is DateTimeKind.Unspecified
Dim time2 As DateTimeOffset = time1
Console.WriteLine("Converted {0} {1} to a DateTimeOffset value of {2}", _
                  time1, _
                  time1.Kind.ToString(), _
                  time2)
' This example displays the following output to the console:
'    Converted 6/19/2008 7:00:00 AM Unspecified to a DateTimeOffset value of 6/19/2008 7:00:00 AM -07:00

Wenn der DateTime Wert das Datum und die Uhrzeit in einer anderen als der lokalen Zeitzone oder UTC wieder gibt, können Sie ihn in einen DateTimeOffset Wert konvertieren und seine Zeitzoneninformationen beibehalten, indem Sie den überladenen DateTimeOffset-Konstruktor aufrufen.If the DateTime value reflects the date and time in something other than the local time zone or UTC, you can convert it to a DateTimeOffset value and preserve its time zone information by calling the overloaded DateTimeOffset constructor. Im folgenden Beispiel wird z. b. ein DateTimeOffset Objekt instanziiert, das die Central Standard Time wieder gibt.For example, the following example instantiates a DateTimeOffset object that reflects Central Standard Time.

DateTime time1 = new DateTime(2008, 6, 19, 7, 0, 0);     // Kind is DateTimeKind.Unspecified
try
{
   DateTimeOffset time2 = new DateTimeOffset(time1, 
                  TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(time1)); 
   Console.WriteLine("Converted {0} {1} to a DateTime value of {2}", 
                     time1, 
                     time1.Kind.ToString(), 
                     time2);
}
// Handle exception if time zone is not defined in registry
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("Unable to identify target time zone for conversion.");
}
// This example displays the following output to the console:
//    Converted 6/19/2008 7:00:00 AM Unspecified to a DateTime value of 6/19/2008 7:00:00 AM -05:00
Dim time1 As Date = #06/19/2008 7:00AM#      ' Kind is DateTimeKind.Unspecified
Try
   Dim time2 As New DateTimeOffset(time1, _
                    TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(time1)) 
   Console.WriteLine("Converted {0} {1} to a DateTime value of {2}", _
                     time1, _
                     time1.Kind.ToString(), _
                     time2)
' Handle exception if time zone is not defined in registry
Catch e As TimeZoneNotFoundException
   Console.WriteLine("Unable to identify target time zone for conversion.")
End Try
' This example displays the following output to the console:
'    Converted 6/19/2008 7:00:00 AM Unspecified to a DateTime value of 6/19/2008 7:00:00 AM -05:00

Der zweite Parameter dieser Konstruktorüberladung, ein TimeSpan Objekt, das die Abweichung der Uhrzeit von der UTC darstellt, sollte durch Aufrufen der TimeZoneInfo.GetUtcOffset(DateTime)-Methode der entsprechenden Zeitzone der Uhrzeit abgerufen werden.The second parameter to this constructor overload, a TimeSpan object that represents the time's offset from UTC, should be retrieved by calling the TimeZoneInfo.GetUtcOffset(DateTime) method of the time's corresponding time zone. Der einzige Parameter der Methode ist der DateTime Wert, der das zu konvertierende Datum und die Uhrzeit darstellt.The method's single parameter is the DateTime value that represents the date and time to be converted. Wenn die Zeitzone die Sommerzeit unterstützt, ermöglicht dieser Parameter der Methode, die richtige Abweichung für dieses spezielle Datum und diese spezielle Uhrzeit zu bestimmen.If the time zone supports daylight saving time, this parameter allows the method to determine the appropriate offset for that particular date and time.

Konvertierungen von DateTimeOffset in DateTimeConversions from DateTimeOffset to DateTime

Die DateTime-Eigenschaft wird am häufigsten verwendet, um DateTimeOffset zu DateTime Konvertierung auszuführen.The DateTime property is most commonly used to perform DateTimeOffset to DateTime conversion. Es wird jedoch ein DateTime Wert zurückgegeben, dessen Kind-Eigenschaft Unspecifiedist, wie im folgenden Beispiel veranschaulicht.However, it returns a DateTime value whose Kind property is Unspecified, as the following example illustrates.

DateTime baseTime = new DateTime(2008, 6, 19, 7, 0, 0);
DateTimeOffset sourceTime;
DateTime targetTime;

// Convert UTC to DateTime value
sourceTime = new DateTimeOffset(baseTime, TimeSpan.Zero);
targetTime = sourceTime.DateTime;
Console.WriteLine("{0} converts to {1} {2}", 
                  sourceTime, 
                  targetTime, 
                  targetTime.Kind.ToString());

// Convert local time to DateTime value
sourceTime = new DateTimeOffset(baseTime, 
                                TimeZoneInfo.Local.GetUtcOffset(baseTime));
targetTime = sourceTime.DateTime;
Console.WriteLine("{0} converts to {1} {2}", 
                  sourceTime, 
                  targetTime, 
                  targetTime.Kind.ToString());

// Convert Central Standard Time to a DateTime value
try
{
   TimeSpan offset = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(baseTime);
   sourceTime = new DateTimeOffset(baseTime, offset);
   targetTime = sourceTime.DateTime;
   Console.WriteLine("{0} converts to {1} {2}", 
                     sourceTime, 
                     targetTime, 
                     targetTime.Kind.ToString());
}
catch (TimeZoneNotFoundException)
{
   Console.WriteLine("Unable to create DateTimeOffset based on U.S. Central Standard Time.");
} 
// This example displays the following output to the console:
//    6/19/2008 7:00:00 AM +00:00 converts to 6/19/2008 7:00:00 AM Unspecified
//    6/19/2008 7:00:00 AM -07:00 converts to 6/19/2008 7:00:00 AM Unspecified
//    6/19/2008 7:00:00 AM -05:00 converts to 6/19/2008 7:00:00 AM Unspecified                       
Const baseTime As Date = #06/19/2008 7:00AM#
Dim sourceTime As DateTimeOffset
Dim targetTime As Date

' Convert UTC to DateTime value
sourceTime = New DateTimeOffset(baseTime, TimeSpan.Zero)
targetTime = sourceTime.DateTime
Console.WriteLine("{0} converts to {1} {2}", _
                  sourceTime, _
                  targetTime, _
                  targetTime.Kind.ToString())

' Convert local time to DateTime value
sourceTime = New DateTimeOffset(baseTime, _
                                TimeZoneInfo.Local.GetUtcOffset(baseTime))
targetTime = sourceTime.DateTime
Console.WriteLine("{0} converts to {1} {2}", _
                  sourceTime, _
                  targetTime, _
                  targetTime.Kind.ToString())

' Convert Central Standard Time to a DateTime value
Try
   Dim offset As TimeSpan = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(baseTime)
   sourceTime = New DateTimeOffset(baseTime, offset)
   targetTime = sourceTime.DateTime
Console.WriteLine("{0} converts to {1} {2}", _
                  sourceTime, _
                  targetTime, _
                  targetTime.Kind.ToString())
Catch e As TimeZoneNotFoundException
   Console.WriteLine("Unable to create DateTimeOffset based on U.S. Central Standard Time.")
End Try 
' This example displays the following output to the console:
'    6/19/2008 7:00:00 AM +00:00 converts to 6/19/2008 7:00:00 AM Unspecified
'    6/19/2008 7:00:00 AM -07:00 converts to 6/19/2008 7:00:00 AM Unspecified
'    6/19/2008 7:00:00 AM -05:00 converts to 6/19/2008 7:00:00 AM Unspecified                       

Dies bedeutet, dass alle Informationen über die Beziehung des DateTimeOffset Werts zur UTC bei der Konvertierung verloren gehen, wenn die DateTime-Eigenschaft verwendet wird.This means that any information about the DateTimeOffset value's relationship to UTC is lost by the conversion when the DateTime property is used. Dies wirkt sich auf DateTimeOffset Werte aus, die der UTC-Zeit oder der lokalen Zeit des Systems entsprechen, da die DateTime Struktur nur diese beiden Zeitzonen in der Kind-Eigenschaft widerspiegelt.This affects DateTimeOffset values that correspond to UTC time or to the system's local time because the DateTime structure reflects only those two time zones in its Kind property.

Um so viele Zeitzoneninformationen wie möglich beizubehalten, wenn ein DateTimeOffset in einen DateTime Wert umgerechnet wird, können Sie die Eigenschaften DateTimeOffset.UtcDateTime und DateTimeOffset.LocalDateTime verwenden.To preserve as much time zone information as possible when converting a DateTimeOffset to a DateTime value, you can use the DateTimeOffset.UtcDateTime and DateTimeOffset.LocalDateTime properties.

Umstellen einer UTC-ZeitConverting a UTC time

Um anzugeben, dass es sich bei einem konvertierten DateTime Wert um die UTC-Zeit handelt, können Sie den Wert der DateTimeOffset.UtcDateTime-Eigenschaft abrufen.To indicate that a converted DateTime value is the UTC time, you can retrieve the value of the DateTimeOffset.UtcDateTime property. Dies unterscheidet sich von der DateTime-Eigenschaft auf zwei Arten:It differs from the DateTime property in two ways:

Hinweis

Wenn Ihre Anwendung erfordert, dass konvertierte DateTime Werte eindeutig einen einzigen Zeitpunkt identifizieren, sollten Sie die DateTimeOffset.UtcDateTime-Eigenschaft verwenden, um alle DateTimeOffset DateTime Konvertierungen zu verarbeiten.If your application requires that converted DateTime values unambiguously identify a single point in time, you should consider using the DateTimeOffset.UtcDateTime property to handle all DateTimeOffset to DateTime conversions.

Im folgenden Code wird die UtcDateTime-Eigenschaft verwendet, um einen DateTimeOffset-Wert zu konvertieren, dessen Offset TimeSpan.Zero einem DateTime Wert entspricht.The following code uses the UtcDateTime property to convert a DateTimeOffset value whose offset equals TimeSpan.Zero to a DateTime value.

DateTimeOffset utcTime1 = new DateTimeOffset(2008, 6, 19, 7, 0, 0, TimeSpan.Zero);
DateTime utcTime2 = utcTime1.UtcDateTime;
Console.WriteLine("{0} converted to {1} {2}", 
                  utcTime1, 
                  utcTime2, 
                  utcTime2.Kind.ToString());
// The example displays the following output to the console:
//   6/19/2008 7:00:00 AM +00:00 converted to 6/19/2008 7:00:00 AM Utc                              
Dim utcTime1 As New DateTimeOffset(#06/19/2008 7:00AM#, TimeSpan.Zero)
Dim utcTime2 As Date = utcTime1.UtcDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  utcTime1, _
                  utcTime2, _
                  utcTime2.Kind.ToString())
' The example displays the following output to the console:
'   6/19/2008 7:00:00 AM +00:00 converted to 6/19/2008 7:00:00 AM Utc                              

Im folgenden Code wird die UtcDateTime-Eigenschaft verwendet, um sowohl eine Zeit Zonen Konvertierung als auch eine Typkonvertierung für einen DateTimeOffset Wert auszuführen.The following code uses the UtcDateTime property to perform both a time zone conversion and a type conversion on a DateTimeOffset value.

DateTimeOffset originalTime = new DateTimeOffset(2008, 6, 19, 7, 0, 0, new TimeSpan(5, 0, 0));
DateTime utcTime = originalTime.UtcDateTime;
Console.WriteLine("{0} converted to {1} {2}", 
                  originalTime, 
                  utcTime, 
                  utcTime.Kind.ToString());
// The example displays the following output to the console:
//       6/19/2008 7:00:00 AM +05:00 converted to 6/19/2008 2:00:00 AM Utc
Dim originalTime As New DateTimeOffset(#6/19/2008 7:00AM#, _
                                       New TimeSpan(5, 0, 0))
Dim utcTime As Date = originalTime.UtcDateTime
Console.WriteLine("{0} converted to {1} {2}", _ 
                  originalTime, _
                  utcTime, _
                  utcTime.Kind.ToString())
' The example displays the following output to the console:
'       6/19/2008 7:00:00 AM +05:00 converted to 6/19/2008 2:00:00 AM Utc

Lokale Zeit wird umgerechnetConverting a local time

Um anzugeben, dass ein DateTimeOffset Wert die Ortszeit darstellt, können Sie den DateTime Wert, der von der DateTimeOffset.DateTime-Eigenschaft zurückgegeben wird, an die static (Shared Visual Basic SpecifyKind)-Methode übergeben.To indicate that a DateTimeOffset value represents the local time, you can pass the DateTime value returned by the DateTimeOffset.DateTime property to the static (Shared in Visual Basic) SpecifyKind method. Die-Methode gibt das an Sie übergebenen Datum und die Uhrzeit als ersten Parameter zurück, legt aber die Kind-Eigenschaft auf den Wert fest, der durch den zweiten Parameter angegeben wird.The method returns the date and time passed to it as its first parameter, but sets the Kind property to the value specified by its second parameter. Im folgenden Code wird die SpecifyKind-Methode verwendet, wenn ein DateTimeOffset Wert, dessen Offset dem Wert der lokalen Zeitzone entspricht, umgerechnet wird.The following code uses the SpecifyKind method when converting a DateTimeOffset value whose offset corresponds to that of the local time zone.

DateTime sourceDate = new DateTime(2008, 6, 19, 7, 0, 0);
DateTimeOffset utcTime1 = new DateTimeOffset(sourceDate, 
                          TimeZoneInfo.Local.GetUtcOffset(sourceDate));
DateTime utcTime2 = utcTime1.DateTime;
if (utcTime1.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(utcTime1.DateTime))) 
   utcTime2 = DateTime.SpecifyKind(utcTime2, DateTimeKind.Local);

Console.WriteLine("{0} converted to {1} {2}", 
                  utcTime1, 
                  utcTime2, 
                  utcTime2.Kind.ToString());
// The example displays the following output to the console:
//   6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local      
Dim sourceDate As Date = #06/19/2008 7:00AM#
Dim utcTime1 As New DateTimeOffset(sourceDate, _
                                   TimeZoneInfo.Local.GetUtcOffset(sourceDate))
Dim utcTime2 As Date = utcTime1.DateTime
If utcTime1.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(utcTime1.DateTime)) Then
   utcTime2 = DateTime.SpecifyKind(utcTime2, DateTimeKind.Local)
End If   
Console.WriteLine("{0} converted to {1} {2}", _
                  utcTime1, _
                  utcTime2, _
                  utcTime2.Kind.ToString())
' The example displays the following output to the console:
'   6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local      

Sie können auch die DateTimeOffset.LocalDateTime-Eigenschaft verwenden, um einen DateTimeOffset-Wert in einen lokalen DateTime Wert zu konvertieren.You can also use the DateTimeOffset.LocalDateTime property to convert a DateTimeOffset value to a local DateTime value. Die Kind-Eigenschaft des zurückgegebenen DateTime Werts ist Local.The Kind property of the returned DateTime value is Local. Im folgenden Code wird die DateTimeOffset.LocalDateTime-Eigenschaft verwendet, wenn ein DateTimeOffset Wert, dessen Offset dem Wert der lokalen Zeitzone entspricht, umgerechnet wird.The following code uses the DateTimeOffset.LocalDateTime property when converting a DateTimeOffset value whose offset corresponds to that of the local time zone.

DateTime sourceDate = new DateTime(2008, 6, 19, 7, 0, 0);
DateTimeOffset localTime1 = new DateTimeOffset(sourceDate, 
                          TimeZoneInfo.Local.GetUtcOffset(sourceDate));
DateTime localTime2 = localTime1.LocalDateTime;

Console.WriteLine("{0} converted to {1} {2}", 
                  localTime1, 
                  localTime2, 
                  localTime2.Kind.ToString());
// The example displays the following output to the console:
//   6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local      
Dim sourceDate As Date = #06/19/2008 7:00AM#
Dim localTime1 As New DateTimeOffset(sourceDate, _
                                   TimeZoneInfo.Local.GetUtcOffset(sourceDate))
Dim localTime2 As Date = localTime1.LocalDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  localTime1, _
                  localTime2, _
                  localTime2.Kind.ToString())
' The example displays the following output to the console:
'   6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local      

Wenn Sie einen DateTime Wert mit der DateTimeOffset.LocalDateTime-Eigenschaft abrufen, konvertiert der get-Accessor der Eigenschaft zuerst den DateTimeOffset Wert in UTC und konvertiert ihn dann in eine lokale Zeit, indem die ToLocalTime-Methode aufgerufen wird.When you retrieve a DateTime value using the DateTimeOffset.LocalDateTime property, the property's get accessor first converts the DateTimeOffset value to UTC, then converts it to local time by calling the ToLocalTime method. Dies bedeutet, dass Sie einen Wert aus der DateTimeOffset.LocalDateTime-Eigenschaft abrufen können, um eine Zeit Zonen Konvertierung zur gleichen Zeit auszuführen, als Sie eine Typkonvertierung durchführen.This means that you can retrieve a value from the DateTimeOffset.LocalDateTime property to perform a time zone conversion at the same time that you perform a type conversion. Es bedeutet auch, dass die beim Durchführen der Konvertierung die Anpassungsregeln der lokalen Zeitzone angewendet werden.It also means that the local time zone's adjustment rules are applied in performing the conversion. Der folgende Code veranschaulicht die Verwendung der DateTimeOffset.LocalDateTime-Eigenschaft, um sowohl einen Typ als auch eine Zeit Zonen Konvertierung auszuführen.The following code illustrates the use of the DateTimeOffset.LocalDateTime property to perform both a type and a time zone conversion.

DateTimeOffset originalDate;
DateTime localDate;

// Convert time originating in a different time zone
originalDate = new DateTimeOffset(2008, 6, 18, 7, 0, 0, 
                                  new TimeSpan(-5, 0, 0));
localDate = originalDate.LocalDateTime;
Console.WriteLine("{0} converted to {1} {2}", 
                  originalDate, 
                  localDate, 
                  localDate.Kind.ToString());
// Convert time originating in a different time zone 
// so local time zone's adjustment rules are applied
originalDate = new DateTimeOffset(2007, 11, 4, 4, 0, 0, 
                                  new TimeSpan(-5, 0, 0));
localDate = originalDate.LocalDateTime;
Console.WriteLine("{0} converted to {1} {2}", 
                  originalDate, 
                  localDate, 
                  localDate.Kind.ToString());
// The example displays the following output to the console:
//       6/19/2008 7:00:00 AM -05:00 converted to 6/19/2008 5:00:00 AM Local
//       11/4/2007 4:00:00 AM -05:00 converted to 11/4/2007 1:00:00 AM Local
Dim originalDate As DateTimeOffset
Dim localDate As Date

' Convert time originating in a different time zone
originalDate = New DateTimeOffset(#06/19/2008 7:00AM#, _
                                  New TimeSpan(-5, 0, 0))
localDate = originalDate.LocalDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  originalDate, _
                  localDate, _
                  localDate.Kind.ToString())
' Convert time originating in a different time zone 
' so local time zone's adjustment rules are applied
originalDate = New DateTimeOffset(#11/04/2007 4:00AM#, _
                                  New TimeSpan(-5, 0, 0))
localDate = originalDate.LocalDateTime
Console.WriteLine("{0} converted to {1} {2}", _
                  originalDate, _
                  localDate, _
                  localDate.Kind.ToString())
' The example displays the following output to the console:
'       6/19/2008 7:00:00 AM -05:00 converted to 6/19/2008 5:00:00 AM Local
'       11/4/2007 4:00:00 AM -05:00 converted to 11/4/2007 1:00:00 AM Local

Eine allgemeine KonvertierungsmethodeA general-purpose conversion method

Im folgenden Beispiel wird eine Methode mit dem Namen ConvertFromDateTimeOffset definiert, die DateTimeOffset Werte in DateTime Werte konvertiert.The following example defines a method named ConvertFromDateTimeOffset that converts DateTimeOffset values to DateTime values. Basierend auf dem Offset bestimmt Sie, ob der DateTimeOffset Wert eine UTC-Zeit, eine lokale Zeit oder eine andere Zeit ist, und definiert die Kind Eigenschaft des zurückgegebenen Datums-und Uhrzeitwerts entsprechend.Based on its offset, it determines whether the DateTimeOffset value is a UTC time, a local time, or some other time, and defines the returned date and time value's Kind property accordingly.

static DateTime ConvertFromDateTimeOffset(DateTimeOffset dateTime)
{
   if (dateTime.Offset.Equals(TimeSpan.Zero))
      return dateTime.UtcDateTime;
   else if (dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime)))
      return DateTime.SpecifyKind(dateTime.DateTime, DateTimeKind.Local);
   else
      return dateTime.DateTime;   
}
Function ConvertFromDateTimeOffset(dateTime As DateTimeOffset) As Date
   If dateTime.Offset.Equals(TimeSpan.Zero) Then
      Return dateTime.UtcDateTime
   ElseIf dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime))
      Return Date.SpecifyKind(dateTime.DateTime, DateTimeKind.Local)
   Else
      Return dateTime.DateTime   
   End If
End Function

Im folgenden Beispiel wird die ConvertFromDateTimeOffset-Methode aufgerufen, um DateTimeOffset Werte zu konvertieren, die eine UTC-Zeit, eine lokale Zeit und eine Uhrzeit in der US Central Standard Time-Zone darstellen.The follow example calls the ConvertFromDateTimeOffset method to convert DateTimeOffset values that represent a UTC time, a local time, and a time in the U.S. Central Standard Time zone.

DateTime timeComponent = new DateTime(2008, 6, 19, 7, 0, 0);
DateTime returnedDate; 

// Convert UTC time
DateTimeOffset utcTime = new DateTimeOffset(timeComponent, TimeSpan.Zero);
returnedDate = ConvertFromDateTimeOffset(utcTime); 
Console.WriteLine("{0} converted to {1} {2}", 
                  utcTime, 
                  returnedDate, 
                  returnedDate.Kind.ToString());
                  
// Convert local time
DateTimeOffset localTime = new DateTimeOffset(timeComponent, 
                           TimeZoneInfo.Local.GetUtcOffset(timeComponent)); 
returnedDate = ConvertFromDateTimeOffset(localTime);                                          
Console.WriteLine("{0} converted to {1} {2}", 
                  localTime, 
                  returnedDate, 
                  returnedDate.Kind.ToString());

// Convert Central Standard Time
DateTimeOffset cstTime = new DateTimeOffset(timeComponent, 
               TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(timeComponent));
returnedDate = ConvertFromDateTimeOffset(cstTime);
Console.WriteLine("{0} converted to {1} {2}", 
                  cstTime, 
                  returnedDate, 
                  returnedDate.Kind.ToString());
// The example displays the following output to the console:
//    6/19/2008 7:00:00 AM +00:00 converted to 6/19/2008 7:00:00 AM Utc
//    6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local
//    6/19/2008 7:00:00 AM -05:00 converted to 6/19/2008 7:00:00 AM Unspecified
Dim timeComponent As Date = #06/19/2008 7:00AM#
Dim returnedDate As Date 

' Convert UTC time
Dim utcTime As New DateTimeOffset(timeComponent, TimeSpan.Zero)
returnedDate = ConvertFromDateTimeOffset(utcTime) 
Console.WriteLine("{0} converted to {1} {2}", _
                  utcTime, _
                  returnedDate, _
                  returnedDate.Kind.ToString())
                  
' Convert local time
Dim localTime As New DateTimeOffset(timeComponent, _
                                    TimeZoneInfo.Local.GetUtcOffset(timeComponent)) 
returnedDate = ConvertFromDateTimeOffset(localTime)                                                                  
Console.WriteLine("{0} converted to {1} {2}", _
                  localTime, _
                  returnedDate, _
                  returnedDate.Kind.ToString())

' Convert Central Standard Time
Dim cstTime As New DateTimeOffset(timeComponent, _
               TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(timeComponent))
returnedDate = ConvertFromDateTimeOffset(cstTime)                                                                  
Console.WriteLine("{0} converted to {1} {2}", _
                  cstTime, _
                  returnedDate, _
                  returnedDate.Kind.ToString())
' The example displays the following output to the console:
'    6/19/2008 7:00:00 AM +00:00 converted to 6/19/2008 7:00:00 AM Utc
'    6/19/2008 7:00:00 AM -07:00 converted to 6/19/2008 7:00:00 AM Local
'    6/19/2008 7:00:00 AM -05:00 converted to 6/19/2008 7:00:00 AM Unspecified

Beachten Sie, dass bei diesem Code von zwei Annahmen ausgegangen wird, die je nach der Anwendung und der Quelle ihrer Datums- und Uhrzeitwerte, nicht immer zutreffen:Note that this code makes two assumptions that, depending on the application and the source of its date and time values, may not always be valid:

  • Dabei wird davon ausgegangen, dass ein Datums-und Uhrzeitwert, dessen Offset TimeSpan.Zero ist, UTC darstellt.It assumes that a date and time value whose offset is TimeSpan.Zero represents UTC. Tatsächlich ist die UTC keine Zeit in einer bestimmten Zeitzone, sondern die Uhrzeit, nach der alle Uhrzeiten in den Zeitzone der Welt standardisiert sind.In fact, UTC is not a time in a particular time zone, but the time in relation to which the times in the world's time zones are standardized. Zeitzonen können auch einen Offset von Zeroaufweisen.Time zones can also have an offset of Zero.

  • Es wird angenommen, dass ein Datums- und Uhrzeitwert, dessen Abweichung der Abweichung der lokalen Zeitzone entspricht, die lokale Zeitzone darstellt.It assumes that a date and time whose offset equals that of the local time zone represents the local time zone. Dies ist möglicherweise nicht der Fall, weil Datums- und Uhrzeitwerte nicht mehr ihrer ursprünglichen Zeitzone verknüpft sind. Datum und Uhrzeit können aus einer anderen Zeitzone mit der gleichen Abweichung stammen.Because date and time values are disassociated from their original time zone, this may not be the case; the date and time can have originated in another time zone with the same offset.

Siehe auchSee also