Metody System.DateTime.ToBinary i FromBinary

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

ToBinary Użyj metody , aby przekonwertować wartość bieżącego DateTime obiektu na wartość binarną. Następnie użyj wartości binarnej i FromBinary metody , aby ponownie utworzyć oryginalny DateTime obiekt.

Ważne

W niektórych przypadkach DateTime wartość zwrócona przez metodę FromBinary nie jest identyczna z oryginalną DateTime wartością dostarczoną do ToBinary metody. Aby uzyskać więcej informacji, zobacz następną sekcję "Dostosowanie czasu lokalnego".

Struktura DateTime składa się z pola prywatnego Kind , które wskazuje, czy określona wartość godziny jest oparta na czasie lokalnym, uniwersalnym czasie koordynowanym (UTC) lub żadna z nich nie jest połączona z polem prywatnym Ticks , który zawiera liczbę 100-nanosekundowych znaczników określających datę i godzinę.

Dostosowanie czasu lokalnego

Czas lokalny, który jest uniwersalnym czasem koordynowanym dostosowanym do lokalnej strefy czasowej, jest reprezentowany przez DateTime strukturę, której Kind właściwość ma wartość Local. Podczas przywracania wartości lokalnej DateTime z reprezentacji binarnej, która jest generowana przez ToBinary metodę, metoda może dostosować ponownie utworzoną wartość, FromBinary aby nie była równa oryginalnej wartości. Może to wystąpić w następujących warunkach:

  • Jeśli obiekt lokalny DateTime jest serializowany w jednej strefie czasowej przez ToBinary metodę, a następnie deserializowany w innej strefie czasowej przez FromBinary metodę, czas lokalny reprezentowany przez wynikowy DateTime obiekt jest automatycznie dostosowywany do drugiej strefy czasowej.

    Rozważmy na przykład DateTime obiekt reprezentujący lokalny czas 15:00. Aplikacja wykonująca w strefie czasowej Pacyfik USA używa ToBinary metody , aby przekonwertować ten DateTime obiekt na wartość binarną. Inna aplikacja, która jest uruchamiana w strefie czasowej usa wschodniej, następnie używa FromBinary metody , aby przekonwertować wartość binarną na nowy DateTime obiekt. Wartość nowego DateTime obiektu to 18:00, który reprezentuje ten sam punkt w czasie co oryginalna wartość 15:00, ale jest dostosowywana do czasu lokalnego w strefie czasowej wschodniej.

  • Jeśli binarna reprezentacja wartości lokalnej DateTime reprezentuje nieprawidłowy czas w lokalnej strefie czasowej systemu, na którym FromBinary jest wywoływany, czas jest dostosowywany tak, aby był prawidłowy.

    Na przykład przejście z czasu standardowego na czas letni występuje w strefie czasowej Pacyfik Stany Zjednoczone 14 marca 2010 r., o godzinie 2:00, kiedy czas upływa o jedną godzinę, do godziny 3:00. Ten interwał godziny jest nieprawidłowym czasem, czyli interwałem czasu, który nie istnieje w tej strefie czasowej. W poniższym przykładzie pokazano, że gdy czas, który mieści się w tym zakresie, jest konwertowany na wartość binarną przez ToBinary metodę, a następnie jest przywracany przez FromBinary metodę, oryginalna wartość jest dostosowywana, aby stała się prawidłową godziną. Można określić, czy określona wartość daty i godziny może podlegać modyfikacji, przekazując ją do TimeZoneInfo.IsInvalidTime metody, jak pokazano w przykładzie.

    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