System.DateTime.ToBinary és FromBinary metódusok

Megjegyzés:

Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.

A metódussal ToBinary az aktuális DateTime objektum értékét bináris értékké alakíthatja. Ezt követően használja a bináris értéket és a FromBinary metódust az eredeti DateTime objektum újbóli létrehozásához.

Fontos

Bizonyos esetekben a DateTime metódus által FromBinary visszaadott érték nem azonos a metódushoz DateTime megadott eredeti ToBinary értékkel. További információkért lásd a következő, "Helyi időbeállítás" című szakaszt.

A DateTime struktúra egy privát Kind mezőből áll, amely azt jelzi, hogy a megadott időérték helyi időn, koordinált világidőn (UTC), vagy egyik sem alapján van-e, kapcsolva egy privát mezőhöz Ticks, amely a dátumot és időt meghatározó 100 nanoszekundumos számlálók számát tartalmazza.

Helyi idő beállítása

A helyi idő, amely a helyi időzónához igazított koordinált univerzális idő, egy DateTime olyan struktúra képviseli, amelynek Kind tulajdonsága az érték Local. A metódus által DateTime előállított bináris ábrázolásból származó helyi ToBinary érték visszaállításakor a FromBinary metódus módosíthatja az újra létrehozott értéket, hogy az ne legyen egyenlő az eredeti értékkel. Ez a következő feltételek mellett fordulhat elő:

  • Ha a metódus egy helyi DateTime objektumot szerializál egy időzónában ToBinary , majd a metódus egy FromBinary másik időzónában deszerializálja, az eredményként DateTime kapott objektum által képviselt helyi idő automatikusan a második időzónához lesz igazítva.

    Vegyük például egy DateTime objektumot, amely helyi idő szerint 15:00 órát mutat. Az alkalmazás, amely az Egyesült Államok csendes-óceáni időzónája szerint fut, a ToBinary metódussal bináris értékké alakítja az DateTime objektumot. Egy másik alkalmazás, amely az Usa keleti időzónájában fut, majd a FromBinary metódussal konvertálja a bináris értéket egy új DateTime objektummá. Az új DateTime objektum értéke 18 óra, amely az eredeti 3 P.M. értékkel megegyező időpontot jelöli, de a keleti időzónában a helyi időhöz van igazítva.

  • Ha egy helyi DateTime érték bináris ábrázolása érvénytelen időt jelöl annak a rendszernek a helyi időzónájában, amelyre FromBinary meghívják, az idő úgy lesz módosítva, hogy érvényes legyen.

    A téli időről a nyári időszámításra való áttérés például az Egyesült Államok csendes-óceáni időzónájában történik 2010. március 14-én, hajnali 2:00-kor, amikor az idő egy órával, hajnali 3:00-ra halad előre. Ez az óraintervallum érvénytelen idő, vagyis olyan időintervallum, amely ebben az időzónában nem létezik. Az alábbi példa azt mutatja be, hogy amikor a metódus bináris értékké konvertálja a ToBinary tartományba eső időt, majd a FromBinary metódus visszaállítja, az eredeti érték érvényes időként lesz módosítva. A példában látható módon meghatározhatja, hogy egy adott dátum- és időérték módosítható-e azáltal, hogy átadja azt a TimeZoneInfo.IsInvalidTime metódusnak.

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