System.DateTime.ToBinary en FromBinary-methoden

Opmerking

In dit artikel vindt u aanvullende opmerkingen in de referentiedocumentatie voor deze API.

Gebruik de ToBinary methode om de waarde van het huidige DateTime object te converteren naar een binaire waarde. Gebruik vervolgens de binaire waarde en de FromBinary methode om het oorspronkelijke DateTime object opnieuw te maken.

Belangrijk

In sommige gevallen is de DateTime waarde die door de FromBinary methode wordt geretourneerd, niet identiek aan de oorspronkelijke DateTime waarde die aan de ToBinary methode is opgegeven. Zie de volgende sectie 'Aanpassing van lokale tijd' voor meer informatie.

Een DateTime structuur bestaat uit een privéveld Kind , dat aangeeft of de opgegeven tijdwaarde is gebaseerd op lokale tijd, Coordinated Universal Time (UTC) of geen van beide, samengevoegd aan een privéveld Ticks , dat het aantal tikken van 100 nanoseconden bevat die een datum en tijd opgeven.

Aanpassing van lokale tijd

Een lokale tijd, een Coordinated Universal Time die is aangepast aan de lokale tijdzone, wordt vertegenwoordigd door een DateTime structuur waarvan Kind de eigenschap de waarde Localheeft. Wanneer u een lokale DateTime waarde herstelt vanuit de binaire weergave die door de ToBinary methode wordt geproduceerd, kan de methode de FromBinary opnieuw gemaakte waarde aanpassen, zodat deze niet gelijk is aan de oorspronkelijke waarde. Dit kan gebeuren onder de volgende omstandigheden:

  • Als een lokaal DateTime object in één tijdzone wordt geserialiseerd door de ToBinary methode en vervolgens door de FromBinary methode in een andere tijdzone wordt gedeserialiseerd, wordt de lokale tijd die wordt vertegenwoordigd door het resulterende DateTime object automatisch aangepast aan de tweede tijdzone.

    Denk bijvoorbeeld aan een DateTime object dat een lokale tijd van 15:00 uur vertegenwoordigt. Een toepassing die wordt uitgevoerd in de Tijdzone Van de Verenigde Oceaan gebruikt de ToBinary methode om dat DateTime object te converteren naar een binaire waarde. Een andere toepassing die wordt uitgevoerd binnen de Eastern Time zone van de VS gebruikt vervolgens de FromBinary methode om de binaire waarde te converteren naar een nieuw DateTime object. De waarde van het nieuwe DateTime object is 6:00 uur, dat hetzelfde tijdstip vertegenwoordigt als de oorspronkelijke 3 P.M.-waarde, maar wordt aangepast aan de lokale tijd in de oostelijke tijdzone.

  • Als de binaire weergave van een lokale DateTime waarde een ongeldige tijd vertegenwoordigt in de lokale tijdzone van het systeem waarop FromBinary wordt aangeroepen, wordt de tijd aangepast zodat deze geldig is.

    De overgang van standaardtijd naar zomertijd vindt bijvoorbeeld plaats in de Pacific Time-zone van de Verenigde Staten op 14 maart 2010 om 2:00 uur, wanneer de tijd met één uur naar 3:00 uur gaat. Dit uurinterval is een ongeldige tijd, dat wil gezegd een tijdsinterval dat niet bestaat in deze tijdzone. In het volgende voorbeeld ziet u dat wanneer een tijd die binnen dit bereik valt, door de ToBinary methode wordt geconverteerd naar een binaire waarde en vervolgens wordt hersteld door de FromBinary methode, de oorspronkelijke waarde wordt aangepast om een geldige tijd te worden. U kunt bepalen of een bepaalde datum- en tijdwaarde kan worden gewijzigd door deze door te geven aan de TimeZoneInfo.IsInvalidTime methode, zoals in het voorbeeld wordt geïllustreerd.

    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