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á ze 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 jedno z toho, a soukromého Ticks pole, které obsahuje počet 100nanosekundových tiků, 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 Spojených států 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. Můžete zjistit, zda konkrétní hodnota data a času může být předmětem úprav, tím, že ji předáte metodě TimeZoneInfo.IsInvalidTime, 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($"{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