Sdílet prostřednictvím


Metody System.DateTime.ToBinary a FromBinary

Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.

ToBinary Pomocí metody převeďte hodnotu aktuálního DateTime objektu na binární hodnotu. Následně použijte binární hodnotu a metodu FromBinary k opětovnému vytvoření původního DateTime objektu.

Důležité

V některých případech DateTime není hodnota vrácená metodou FromBinary identická s původní DateTime hodnotou zadanou metodou ToBinary . Další informace najdete v další části "Místní úprava času".

Struktura DateTime se skládá z soukromého Kind pole, které označuje, zda je zadaná časová hodnota založená na místním čase, koordinovaném univerzálním čase (UTC) nebo ani v žádném případě, zřetězení do soukromého Ticks pole, které obsahuje počet 100 nanosekundových záčinek, které určují datum a čas.

Místní úprava času

Místní čas, což je koordinovaný univerzální čas upravený na místní časové pásmo, je reprezentován strukturou DateTime , jejíž Kind vlastnost má hodnotu Local. Při obnovování místní DateTime hodnoty z binární reprezentace vytvořené ToBinary metodou FromBinary může metoda upravit znovu vytvořenou hodnotu tak, aby nebyla rovna původní hodnotě. K tomu může dojít za následujících podmínek:

  • Pokud je místní DateTime objekt serializován v jednom časovém pásmu ToBinary metodou a poté deserializován v jiném časovém pásmu metodou FromBinary , místní čas reprezentovaný výsledným DateTime objektem se automaticky upraví na druhé časové pásmo.

    Představte si DateTime například objekt, který představuje místní čas 3:00. Aplikace, která se spouští v americkém časovém pásmu Tichomoří, používá metodu ToBinary k převodu tohoto DateTime objektu na binární hodnotu. Jiná aplikace, která se spouští v americkém východním časovém pásmu, pak pomocí FromBinary metody převede binární hodnotu na nový DateTime objekt. Hodnota nového DateTime objektu je 6:00, která představuje stejný bod v čase jako původní hodnota 3:00, ale je upravena na místní čas ve východním časovém pásmu.

  • Pokud binární reprezentace místní DateTime hodnoty představuje neplatný čas v místním časovém pásmu systému, na kterém FromBinary je volána, čas se upraví tak, aby byl platný.

    Například přechod ze standardního času na letní čas se vyskytuje v tichomořském časovém pásmu USA 14. března 2010 v 2:00, kdy čas přejde o hodinu do 3:00. Tento hodinový interval je neplatný čas, tj. časový interval, který v tomto časovém pásmu neexistuje. Následující příklad ukazuje, že když je čas, který spadá do tohoto rozsahu, převeden na binární hodnotu ToBinary metodou a pak je obnoven metodou FromBinary , původní hodnota je upravena tak, aby se stala platnou dobou. Konkrétní hodnotu data a času můžete určit tak, že ji TimeZoneInfo.IsInvalidTime předáte metodě, jak je znázorněno v příkladu.

    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