Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Obwohl die DateTimeOffset Struktur einen größeren Grad an Zeitzonenbewusstsein bietet als die DateTime Struktur, DateTime werden Parameter häufiger in Methodenaufrufen verwendet. Aufgrund dieses Ansatzes ist die Fähigkeit, DateTimeOffset-Werte in DateTime-Werte und umgekehrt zu konvertieren, wichtig. In diesem Artikel wird gezeigt, wie Sie diese Konvertierungen so durchführen, dass so viele Zeitzoneninformationen wie möglich erhalten bleiben.
Hinweis
Sowohl die DateTime- als auch die DateTimeOffset-Typen weisen einige Einschränkungen auf, wenn Zeiten in Zeitzonen dargestellt werden. Mit der Kind-Eigenschaft kann DateTime nur die koordinierte Weltzeit (UTC) und die lokale Zeitzone des Systems widerspiegeln. DateTimeOffset gibt den Abstand einer Zeit von UTC wieder, aber sie spiegelt nicht die tatsächliche Zeitzone wider, zu der dieser Offset gehört. Weitere Informationen zu Zeitwerten und Unterstützung für Zeitzonen finden Sie unter "Auswählen zwischen DateTime", "DateTimeOffset", "TimeSpan" und "TimeZoneInfo".
Konvertierungen von DateTime in DateTimeOffset
Die DateTimeOffset Struktur bietet zwei gleichwertige Möglichkeiten zur Konvertierung DateTimeDateTimeOffset, die für die meisten Konvertierungen geeignet sind:
Der DateTimeOffset Konstruktor, der ein neues DateTimeOffset Objekt basierend auf einem DateTime Wert erstellt.
Der implizite Konvertierungsoperator, mit dem Sie einem DateTime Objekt einen DateTimeOffset Wert zuweisen können.
Bei UTC- und lokalen DateTime Werten entspricht die Offset Eigenschaft des resultierenden DateTimeOffset Werts genau dem UTC- oder lokalen Zeitzonenoffset. Der folgende Code konvertiert z. B. eine UTC-Zeit in den entsprechenden DateTimeOffset Wert:
DateTime utcTime1 = new DateTime(2008, 6, 19, 7, 0, 0);
utcTime1 = DateTime.SpecifyKind(utcTime1, DateTimeKind.Utc);
DateTimeOffset utcTime2 = utcTime1;
Console.WriteLine($"Converted {utcTime1} {utcTime1.Kind} to a DateTimeOffset value of {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 ist der Offset der utcTime2 Variablen 00:00. Entsprechend konvertiert der folgende Code eine lokale Zeit in den entsprechenden DateTimeOffset Wert. Die Konvertierung wird in der Us-Pazifischen Standardzeitzone ausgeführt:
DateTime localTime1 = new DateTime(2008, 6, 19, 7, 0, 0);
localTime1 = DateTime.SpecifyKind(localTime1, DateTimeKind.Local);
DateTimeOffset localTime2 = localTime1;
Console.WriteLine($"Converted {localTime1} {localTime1.Kind} to a DateTimeOffset value of {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
Bei DateTime Werten, deren Kind Eigenschaft lautet DateTimeKind.Unspecified, erzeugen diese beiden Konvertierungsmethoden jedoch einen DateTimeOffset Wert, dessen Offset der lokalen Zeitzone entspricht. Die Konvertierung wird im folgenden Beispiel gezeigt, das in der Zeitzone "U.S. Pacific Standard" ausgeführt wird:
DateTime time1 = new DateTime(2008, 6, 19, 7, 0, 0); // Kind is DateTimeKind.Unspecified
DateTimeOffset time2 = time1;
Console.WriteLine($"Converted {time1} {time1.Kind} to a DateTimeOffset value of {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 Zeitzone als der lokalen Zeitzone oder UTC widerspiegelt, können Sie ihn in einen DateTimeOffset Wert konvertieren und seine Zeitzoneninformationen beibehalten, indem Sie den überladenen DateTimeOffset Konstruktor aufrufen. Im folgenden Beispiel wird beispielsweise ein Objekt instanziiert, das die DateTimeOffset zentrale Standardzeit widerspiegelt:
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 {time1} {time1.Kind} to a DateTime value of {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 für diese Konstruktorüberladung ist ein TimeSpan Objekt, das den Zeitoffset von UTC darstellt. Rufen Sie es ab, indem Sie die TimeZoneInfo.GetUtcOffset(DateTime)-Methode der entsprechenden Zeitzone aufrufen. Der einzelne Parameter der Methode ist der DateTime Wert, der das zu konvertierende Datum und die Uhrzeit darstellt. Wenn die Zeitzone Sommerzeit unterstützt, ermöglicht dieser Parameter der Methode die Bestimmung des entsprechenden Offsets für dieses bestimmte Datum und diese Uhrzeit.
Konvertierungen von DateTimeOffset in DateTime
Die DateTime Eigenschaft wird am häufigsten zum DateTimeOffsetDateTime Konvertieren verwendet. Gibt jedoch einen DateTime Wert zurück, dessen Kind Eigenschaft Unspecified ist, wie im folgenden Beispiel veranschaulicht:
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($"{sourceTime} converts to {targetTime} {targetTime.Kind}");
// Convert local time to DateTime value
sourceTime = new DateTimeOffset(baseTime,
TimeZoneInfo.Local.GetUtcOffset(baseTime));
targetTime = sourceTime.DateTime;
Console.WriteLine($"{sourceTime} converts to {targetTime} {targetTime.Kind}");
// 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($"{sourceTime} converts to {targetTime} {targetTime.Kind}");
}
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
Im vorherigen Beispiel wird gezeigt, dass alle Informationen zur Beziehung des DateTimeOffset Werts zu UTC durch die Konvertierung verloren gehen, wenn die DateTime Eigenschaft verwendet wird. Dieses Verhalten wirkt sich auch auf Werte aus DateTimeOffset aus, die der UTC-Zeit oder der lokalen Zeit des Systems entsprechen, da die DateTime Struktur nur diese beiden Zeitzonen in ihrer Kind Eigenschaft widerspiegelt.
Beim Konvertieren eines DateTimeOffset zu einem DateTime-Wert, um so viele Zeitzoneninformationen wie möglich beizubehalten, können Sie die Eigenschaften DateTimeOffset.UtcDateTime und DateTimeOffset.LocalDateTime verwenden.
Konvertieren einer UTC-Zeit
Um anzugeben, dass ein konvertierter DateTime Wert die UTC-Zeit ist, können Sie den Wert der DateTimeOffset.UtcDateTime Eigenschaft abrufen. Sie unterscheidet sich von der DateTime Eigenschaft auf zwei Arten:
Es gibt einen DateTime Wert zurück, dessen Kind Eigenschaft lautet Utc.
Wenn der Offset Eigenschaftswert nicht gleich TimeSpan.Zeroist, wird die Zeit in UTC konvertiert.
Hinweis
Wenn Ihre Anwendung erfordert, dass konvertierte DateTime Werte einen einzelnen Zeitpunkt eindeutig identifizieren, sollten Sie die DateTimeOffset.UtcDateTime Eigenschaft verwenden, um alle DateTimeOffset Konvertierungen zu DateTime verarbeiten.
Der folgende Code verwendet die UtcDateTime-Eigenschaft, um einen DateTimeOffset-Wert, dessen Offset einem TimeSpan.Zero-Wert entspricht, in einen DateTime-Wert zu konvertieren:
DateTimeOffset utcTime1 = new DateTimeOffset(2008, 6, 19, 7, 0, 0, TimeSpan.Zero);
DateTime utcTime2 = utcTime1.UtcDateTime;
Console.WriteLine($"{utcTime1} converted to {utcTime2} {utcTime2.Kind}");
// 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
Der folgende Code verwendet die UtcDateTime Eigenschaft, um sowohl eine Zeitzonenkonvertierung als auch eine Typkonvertierung für einen DateTimeOffset Wert auszuführen:
DateTimeOffset originalTime = new DateTimeOffset(2008, 6, 19, 7, 0, 0, new TimeSpan(5, 0, 0));
DateTime utcTime = originalTime.UtcDateTime;
Console.WriteLine($"{originalTime} converted to {utcTime} {utcTime.Kind}");
// 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
Konvertieren einer Ortszeit
Um anzugeben, dass ein DateTimeOffset-Wert die lokale Uhrzeit darstellt, können Sie den DateTime-Wert übergeben, der von der eigenschaft DateTimeOffset.DateTime an die static (Shared in Visual Basic) SpecifyKind-Methode zurückgegeben wird. Die Methode gibt das Datum und die Uhrzeit zurück, die als erster Parameter übergeben wird, legt dabei jedoch die Kind-Eigenschaft auf den Wert fest, der durch den zweiten Parameter angegeben wird. Der folgende Code verwendet die SpecifyKind Methode beim Konvertieren eines DateTimeOffset Werts, dessen Offset der lokalen Zeitzone entspricht:
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($"{utcTime1} converted to {utcTime2} {utcTime2.Kind}");
// 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 die DateTimeOffset.LocalDateTime Eigenschaft auch verwenden, um einen DateTimeOffset Wert in einen lokalen DateTime Wert zu konvertieren. Die Kind Eigenschaft des zurückgegebenen DateTime Werts lautet Local. Der folgende Code verwendet die DateTimeOffset.LocalDateTime Eigenschaft beim Konvertieren eines DateTimeOffset Werts, dessen Offset der lokalen Zeitzone entspricht:
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($"{localTime1} converted to {localTime2} {localTime2.Kind}");
// 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 mithilfe der DateTimeOffset.LocalDateTime Eigenschaft abrufen, konvertiert der Accessor der Eigenschaft get zuerst den DateTimeOffset Wert in UTC und konvertiert ihn dann durch Aufrufen der ToLocalTime Methode in die Ortszeit. Dieses Verhalten bedeutet, dass Sie einen Wert aus der DateTimeOffset.LocalDateTime-Eigenschaft abrufen können, um eine Zeitzonenkonvertierung gleichzeitig mit einer Typkonvertierung durchzuführen. Dies bedeutet auch, dass die Anpassungsregeln der lokalen Zeitzone bei der Ausführung der Konvertierung angewendet werden. Der folgende Code veranschaulicht die Verwendung der DateTimeOffset.LocalDateTime Eigenschaft zum Ausführen eines Typs und einer Zeitzonenkonvertierung. Die Beispielausgabe ist für eine Maschine gedacht, die auf die Pazifische Zeitzone (USA und Kanada) eingestellt ist. Das Novemberdatum fällt in die Pazifische Normalzeit, die UTC-8 entspricht, während das Junidatum in die Sommerzeit fällt, die UTC-7 entspricht.
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($"{originalDate} converted to {localDate} {localDate.Kind}");
// 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($"{originalDate} converted to {localDate} {localDate.Kind}");
// The example displays the following output to the console,
// when you run it on a machine that is set to Pacific Time (US & Canada):
// 6/18/2008 7:00:00 AM -05:00 converted to 6/18/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,
' when you run it on a machine that is set to Pacific Time (US & Canada):
' 6/18/2008 7:00:00 AM -05:00 converted to 6/18/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
Universelle Konvertierungsmethode
Im folgenden Beispiel wird eine Methode namens ConvertFromDateTimeOffset definiert, die DateTimeOffset-Werte in DateTime-Werte konvertiert. Basierend auf dem Offset bestimmt sie, ob es sich bei dem DateTimeOffset Wert um eine UTC-Zeit, eine Ortszeit oder eine andere Uhrzeit handelt, und definiert die Eigenschaft des zurückgegebenen Datums- und Uhrzeitwerts Kind entsprechend.
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 Werte zu konvertieren DateTimeOffset , die eine UTC-Zeit, eine Ortszeit und eine Uhrzeit in der Zeitzone "US-Zentralstandard" darstellen.
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($"{utcTime} converted to {returnedDate} {returnedDate.Kind}");
// Convert local time
DateTimeOffset localTime = new DateTimeOffset(timeComponent,
TimeZoneInfo.Local.GetUtcOffset(timeComponent));
returnedDate = ConvertFromDateTimeOffset(localTime);
Console.WriteLine($"{localTime} converted to {returnedDate} {returnedDate.Kind}");
// Convert Central Standard Time
DateTimeOffset cstTime = new DateTimeOffset(timeComponent,
TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time").GetUtcOffset(timeComponent));
returnedDate = ConvertFromDateTimeOffset(cstTime);
Console.WriteLine($"{cstTime} converted to {returnedDate} {returnedDate.Kind}");
// 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
Hinweis
Der Code nimmt je nach Anwendung und Quelle der Datums- und Uhrzeitwerte die folgenden beiden Annahmen vor, ist möglicherweise nicht immer gültig:
Es wird angenommen, dass ein Datums- und Uhrzeitwert, dessen Offset TimeSpan.Zero als UTC interpretiert wird. Tatsächlich ist UTC keine Zeit in einer bestimmten Zeitzone, sondern die Zeit, zu der die Zeiten in den Zeitzonen weltweit standardisiert werden. Zeitzonen können ebenfalls einen Ausgleich von Zero haben.
Es wird davon ausgegangen, dass ein Datum und eine Uhrzeit, deren Offset der lokalen Zeitzone entspricht, die lokale Zeitzone darstellt. Da Datums- und Uhrzeitwerte von der ursprünglichen Zeitzone getrennt werden, ist dies möglicherweise nicht der Fall. Das Datum und die Uhrzeit können in einer anderen Zeitzone mit demselben Offset stammen.