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.
Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.
Verwenden Sie die ToBinary Methode, um den Wert des aktuellen DateTime Objekts in einen Binärwert zu konvertieren. Verwenden Sie anschließend den Binärwert und die FromBinary Methode, um das ursprüngliche DateTime Objekt neu zu erstellen.
Von Bedeutung
In einigen Fällen ist der DateTime von der FromBinary Methode zurückgegebene Wert nicht mit dem ursprünglichen DateTime Wert identisch, der der ToBinary Methode bereitgestellt wird. Weitere Informationen finden Sie im nächsten Abschnitt "Anpassung der Ortszeit".
Eine DateTime-Struktur besteht aus einem privaten Kind-Feld, das angibt, ob der angegebene Zeitwert auf lokaler Zeit, koordinierter Weltzeit (UTC) oder keiner von beiden basiert, und ist mit einem privaten Ticks-Feld verkettet, das die Anzahl von 100-Nanosekunden-Intervallen enthält, die ein Datum und eine Uhrzeit bestimmen.
Anpassung der Ortszeit
Eine Ortszeit, bei der es sich um eine koordinierte Weltzeit handelt, die an die lokale Zeitzone angepasst ist, wird durch eine DateTime Struktur dargestellt, deren Kind Eigenschaft den Wert Localaufweist. Beim Wiederherstellen eines lokalen DateTime Werts aus der binären Darstellung, die von der ToBinary Methode erzeugt wird, kann die FromBinary Methode den neu erstellten Wert so anpassen, dass er nicht dem ursprünglichen Wert entspricht. Dies kann unter den folgenden Bedingungen auftreten:
Wenn ein lokales DateTime Objekt in einer Zeitzone durch die ToBinary Methode serialisiert und dann in einer anderen Zeitzone durch die FromBinary Methode deserialisiert wird, wird die durch das resultierende DateTime Objekt dargestellte Ortszeit automatisch an die zweite Zeitzone angepasst.
Betrachten Sie z. B. ein DateTime Objekt, das eine Ortszeit von 3 P.M. darstellt. Eine Anwendung, die in der Us-Pazifischen Zeitzone ausgeführt wird, verwendet die ToBinary Methode, um dieses DateTime Objekt in einen Binärwert zu konvertieren. Eine andere Anwendung, die in der Zeitzone "USA eastern" ausgeführt wird, verwendet dann die FromBinary Methode, um den Binärwert in ein neues DateTime Objekt zu konvertieren. Der Wert des neuen DateTime Objekts ist 6 P.M., der den gleichen Zeitpunkt wie der ursprüngliche 3:00-Wert darstellt, wird jedoch an die Ortszeit in der Eastern Time Zone angepasst.
Wenn die binäre Darstellung eines lokalen DateTime Werts eine ungültige Uhrzeit in der lokalen Zeitzone des Systems darstellt, auf dem FromBinary aufgerufen wird, wird die Zeit so angepasst, dass sie gültig ist.
Der Übergang von Standardzeit zu Sommerzeit erfolgt beispielsweise in der Pazifischen Zeitzone der Vereinigten Staaten am 14. März 2010 um 2:00 Uhr, wenn die Zeit um eine Stunde auf 3:00 Uhr vorschreitet. Dieses Stundenintervall ist eine ungültige Uhrzeit, d. h. ein Zeitintervall, das in dieser Zeitzone nicht vorhanden ist. Das folgende Beispiel zeigt, dass, wenn eine Zeit, die in diesen Bereich fällt, von der ToBinary Methode in einen Binärwert konvertiert und dann von der FromBinary Methode wiederhergestellt wird, der ursprüngliche Wert so angepasst wird, dass er eine gültige Zeit darstellt. Sie können bestimmen, ob ein bestimmter Datums- und Uhrzeitwert geändert werden kann, indem Sie ihn an die TimeZoneInfo.IsInvalidTime Methode übergeben, wie das Beispiel veranschaulicht.
using System; public class Example { public static void Main() { DateTime localDate = new DateTime(2010, 3, 14, 2, 30, 0, DateTimeKind.Local); long binLocal = localDate.ToBinary(); if (TimeZoneInfo.Local.IsInvalidTime(localDate)) Console.WriteLine($"{localDate} is an invalid time in the {TimeZoneInfo.Local.StandardName} zone."); DateTime localDate2 = DateTime.FromBinary(binLocal); Console.WriteLine($"{localDate} = {localDate2}: {localDate.Equals(localDate2)}"); } } // The example displays the following output: // 3/14/2010 2:30:00 AM is an invalid time in the Pacific Standard Time zone. // 3/14/2010 2:30:00 AM = 3/14/2010 3:30:00 AM: Falseopen System let localDate = DateTime(2010, 3, 14, 2, 30, 0, DateTimeKind.Local) let binLocal = localDate.ToBinary() if TimeZoneInfo.Local.IsInvalidTime localDate then printfn $"{localDate} is an invalid time in the {TimeZoneInfo.Local.StandardName} zone." let localDate2 = DateTime.FromBinary binLocal printfn $"{localDate} = {localDate2}: {localDate.Equals localDate2}" // The example displays the following output: // 3/14/2010 2:30:00 AM is an invalid time in the Pacific Standard Time zone. // 3/14/2010 2:30:00 AM = 3/14/2010 3:30:00 AM: FalseModule Example Public Sub Main() Dim localDate As Date = DateTime.SpecifyKind(#03/14/2010 2:30AM#, DateTimeKind.Local) Dim binLocal As Long = localDate.ToBinary() If TimeZoneInfo.Local.IsInvalidTime(localDate) Then Console.WriteLine("{0} is an invalid time in the {1} zone.", _ localDate, _ TimeZoneInfo.Local.StandardName) End If Dim localDate2 As Date = DateTime.FromBinary(binLocal) Console.WriteLine("{0} = {1}: {2}", _ localDate, localDate2, localDate.Equals(localDate2)) End Sub End Module ' The example displays the following output: ' 3/14/2010 2:30:00 AM is an invalid time in the Pacific Standard Time zone. ' 3/14/2010 2:30:00 AM = 3/14/2010 3:30:00 AM: False