System.DateTime.ToBinary- und FromBinary-Methoden

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.

Wichtig

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 der beiden mit einem privaten Ticks Feld verkettet ist, das die Anzahl von 100-Nanosekunden-Teilstrichen enthält, die ein Datum und eine Uhrzeit angeben.

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. Dieser Fall kann unter den folgenden Bedingungen eintreten:

  • 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 USA am 14. März 2010 um 2:00 Uhr, wenn die Zeit um eine Stunde auf 3:00 Uhr wechselt. Dieses Stundenintervall ist eine ungültige Uhrzeit, d. h. ein Zeitintervall, das in dieser Zeitzone nicht vorhanden ist. Das folgende Beispiel zeigt, dass der ursprüngliche Wert angepasst wird, 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 an eine gültige Zeit angepasst wird. 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("{0} is an invalid time in the {1} zone.",
                               localDate,
                               TimeZoneInfo.Local.StandardName);
    
          DateTime localDate2 = DateTime.FromBinary(binLocal);
          Console.WriteLine("{0} = {1}: {2}",
                            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: False
    
    open 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: False
    
    Module 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