Freigeben über


Konvertieren zwischen "DateTime" und "DateTimeOffset"

Aktualisiert: November 2007

Die DateTimeOffset-Struktur bietet zwar eine umfassendere Unterstützung von Zeitzonen als die DateTime-Struktur, DateTime-Parameter werden in Methodenaufrufen jedoch häufiger verwendet. Daher kommt der Möglichkeit, DateTimeOffset-Werte in DateTime-Werte zu konvertieren und umgekehrt, eine besondere Bedeutung zu. In diesem Thema wird beschrieben, wie diese Konvertierungen so durchgeführt werden können, dass möglichst viele Zeitzoneninformationen erhalten bleiben.

Hinweis:

Sowohl der DateTime-Typ als auch der DateTimeOffset-Typ unterliegen bei der Darstellung von Zeiten in Zeitzonen gewissen Einschränkungen. Mit seiner Kind-Eigenschaft kann der DateTime-Typ nur die koordinierte Weltzeit und die lokale Zeitzone wiedergeben. Der DateTimeOffset-Typ hingegen gibt den Offset einer Zeit von der koordinierten Weltzeit wieder, jedoch nicht die eigentliche Zeitzone, zu der dieser Offset gehört. Ausführliche Informationen zu Zeitwerten und die Unterstützung von Zeitzonen finden Sie unter Auswählen zwischen "DateTime", "DateTimeOffset" und "TimeZoneInfo".

Konvertieren von "DateTime" in "DateTimeOffset"

Die DateTimeOffset-Struktur bietet zwei gleichwertige Möglichkeiten zum Konvertieren von DateTime-Werten in DateTimeOffset-Werte, die für die meisten Konvertierungen geeignet sind:

Für UTC- und lokale DateTime-Werte gibt die Offset-Eigenschaft des resultierenden DateTimeOffset-Werts den Offset von der koordinierten Weltzeit oder der lokalen Zeitzone genau wieder. Im folgenden Code wird z. B. eine UTC-Zeit in den entsprechenden DateTimeOffset-Wert konvertiert.

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

In diesem Fall beträgt der Offset der utcTime2-Variablen 00:00. Auf ähnliche Weise wird im folgenden Code eine lokale Zeit in den entsprechenden DateTimeOffset-Wert konvertiert.

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

Für DateTime-Werte, deren Kind-Eigenschaft DateTimeKind.Unspecified lautet, bringen diese beiden Konvertierungsmethoden jedoch einen DateTimeOffset-Wert hervor, dessen Offset dem dem lokalen Zeitzone entspricht. Dies wird im folgenden Beispiel gezeigt, das in der Zeitzone Pacific Normalzeit ausgeführt wird.

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

Wenn der DateTime-Wert einen Datums- und Uhrzeitwert wiedergibt, der nicht der lokalen Zeitzone oder der koordinierten Weltzeit entspricht, können Sie ihn in einen DateTimeOffset-Wert konvertieren und seine Zeitzoneninformationen beibehalten, indem Sie den überladenen DateTimeOffset-Konstruktor aufrufen. Im folgenden Beispiel wird z. B. ein DateTimeOffset-Objekt instanziiert, das die Zeitzone Central Normalzeit wiedergibt.

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

Der zweite Parameter für diese Konstruktorüberladung (ein TimeSpan-Objekt, das den Offset von der koordinierten Weltzeit angibt) sollte durch Aufrufen der TimeZoneInfo.GetUtcOffset(DateTime)-Methode der entsprechenden Zeitzone abgerufen werden. Der einzige Parameter dieser Methode ist der DateTime-Wert, der den zu konvertierenden Datums- und Uhrzeitwert darstellt. Wenn die Zeitzone die Sommerzeit unterstützt, kann die Methode mit diesem Parameter den entsprechenden Offset für den Datums- und Uhrzeitwert bestimmen.

Konvertieren von "DateTimeOffset " in "DateTime"

Die DateTime-Eigenschaft wird für gewöhnlich verwendet, um DateTimeOffset-Werte in DateTime-Werte zu konvertieren. Sie gibt jedoch einen DateTime-Wert zurück, dessen Kind-Eigenschaft Unspecified ist, wie im folgenden Beispiel veranschaulicht wird.

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

Das bedeutet, dass alle Informationen über die Beziehung des DateTimeOffset-Werts mit der koordinierten Weltzeit durch die Konvertierung verloren gehen, wenn die DateTime-Eigenschaft verwendet wird. Dies hat Auswirkungen auf die DateTimeOffset-Werte, die der UTC-Zeit oder der lokalen Systemzeit entsprechen, da die DateTime-Struktur in seiner Kind-Eigenschaft nur zwei Zeitzonen wiedergibt.

Damit beim Konvertieren eines DateTimeOffset-Werts in einen DateTime-Wert möglichst viele Zeitzoneninformationen erhalten bleiben, können Sie die DateTimeOffset.UtcDateTime-Eigenschaft und die DateTimeOffset.LocalDateTime-Eigenschaft verwenden.

Konvertieren einer UTC-Zeit

Um anzugeben, dass ein konvertierter DateTime-Wert der UTC-Zeit entspricht, können Sie den Wert der DateTimeOffset.UtcDateTime-Eigenschaft abrufen. Diese unterscheidet sich von der DateTime-Eigenschaft in zweierlei Hinsicht:

  • Sie gibt einen DateTime-Wert zurück, dessen Kind-Eigenschaft Utc ist.

  • Wenn der Wert der Offset-Eigenschaft nicht Zero() entspricht, konvertiert sie die Zeit in die UTC-Zeit.

Hinweis:

Wenn Ihre Anwendung erfordert, dass konvertierte DateTime-Werte einen bestimmten Zeitpunkt eindeutig identifizieren, empfiehlt es sich, die DateTimeOffset.UtcDateTime-Eigenschaft zum Konvertieren sämtlicher DateTimeOffset-Werte in DateTime-Werte zu verwenden.

Im folgenden Code wird die UtcDateTime-Eigenschaft verwendet, um einen DateTimeOffset-Wert, dessen Offset Zero() entspricht, in einen DateTime-Wert zu konvertieren.

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

Im folgenden Code wird die UtcDateTime-Eigenschaft verwendet, um für einen DateTimeOffset-Wert sowohl eine Zeitzonenkonvertierung als auch eine Typkonvertierung durchzuführen.

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

Konvertieren einer lokalen Zeit

Um anzugeben, dass ein DateTimeOffset-Wert die lokale Zeit darstellt, können Sie den DateTime-Wert übergeben, der von der DateTimeOffset.DateTime-Eigenschaft an die static (Shared in Visual Basic) SpecifyKind()-Methode zurückgegeben wird. Diese Methode gibt den Datums- und Uhrzeitwert zurück, der ihr als erster Parameter übergeben wurde, aber legt die Kind-Eigenschaft auf den Wert fest, der durch ihren zweiter Parameter angegeben wurde. Im folgenden Code wird die SpecifyKind()-Methode verwendet, um einen DateTimeOffset-Wert zu konvertieren, dessen Offset dem der lokalen Zeitzone entspricht.

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

Sie können auch die DateTimeOffset.LocalDateTime-Eigenschaft verwenden, um einen DateTimeOffset-Wert in einen lokalen DateTime-Wert zu konvertieren. Die Kind-Eigenschaft des zurückgegebenen DateTime-Werts ist Local. Im folgenden Code wird die DateTimeOffset.LocalDateTime-Eigenschaft verwendet, um einen DateTimeOffset-Wert zu konvertieren, dessen Offset dem der lokalen Zeitzone entspricht.

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

Wenn Sie einen DateTime-Wert mit der DateTimeOffset.LocalDateTime-Eigenschaft abrufen, konvertiert der get-Accessor dieser Eigenschaft den DateTimeOffset-Wert zunächst in die koordinierte Weltzeit und anschließend in die lokale Zeit, indem die ToLocalTime-Methode aufgerufen wird. Das bedeutet, dass Sie einen Wert von der DateTimeOffset.LocalDateTime-Eigenschaft abrufen können, um eine Zeitzonenkonvertierung zeitgleich mit einer Typkonvertierung durchzuführen. Außerdem bedeutet es, dass die Anpassungsregeln der lokalen Zeitzone während der Konvertierung angewendet werden. Der folgende Code veranschaulicht die Verwendung der DateTimeOffset.LocalDateTime-Eigenschaft zur Durchführung einer Zeitzonenkonvertierung und einer Typkonvertierung.

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

Eine allgemeine Konvertierungsmethode

Im folgenden Beispiel wird eine Methode namens ConvertFromDateTimeOffset definiert, die DateTimeOffset-Werte in DateTime-Werte konvertiert. Auf Basis ihres Offsets bestimmt sie, ob der DateTimeOffset-Wert eine koordinierte Weltzeit, eine lokale Zeit oder eine andere Zeit darstellt, und definiert entsprechend die Kind-Eigenschaft des zurückgegebenen Datums- und Uhrzeitwerts.

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
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;   
}

Im folgenden Beispiel wird die ConvertFromDateTimeOffset-Methode aufgerufen, um DateTimeOffset-Werte, die eine UTC-Zeit darstellen, in eine lokale Zeit und eine Zeit in der Zeitzone Central Normalzeit zu konvertieren.

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

Beachten Sie, dass in diesem Code von zwei Annahmen ausgegangen wird, die je nach Anwendung und Quelle der Datums- und Uhrzeitwerte nicht immer gültig sein müssen:

  • Es wird davon ausgegangen, dass ein Datums- und Uhrzeitwert, dessen Offset Zero ist, die koordinierte Weltzeit darstellt. Tatsächlich ist die koordinierte Weltzeit aber keine Zeit in einer bestimmten Zeitzone, sondern eine Zeit, in Bezug auf die die Zeiten in den Zeitzonen der Erde standardisiert werden. Zeitzonen können auch den Offset Zero haben.

  • Es wird davon ausgegangen, dass ein Datums- und Uhrzeitwert, dessen Offset dem der lokalen Zeitzone entspricht, die lokale Zeitzone darstellt. Da die Zuordnung von Datums- und Uhrzeitwerten zu ihrer ursprünglichen Zeitzone aufgehoben wird, ist dies möglicherweise jedoch nicht der Fall. Der Datums- und Uhrzeitwert kann aus einer anderen Zeitzone mit dem gleichen Offset stammen.

Siehe auch

Weitere Ressourcen

Uhrzeiten und Zeitzonen