Aracılığıyla paylaş


System.DateTime.ToBinary ve FromBinary yöntemleri

Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.

Geçerli ToBinary nesnesinin değerini ikili değere dönüştürmek için DateTime yöntemini kullanın. Daha sonra, özgün FromBinary nesnesini yeniden oluşturmak için ikili değeri ve DateTime yöntemini kullanın.

Önemli

Bazı durumlarda, DateTime yöntemi tarafından döndürülen FromBinary değeri, DateTime yöntemine sağlanan özgün ToBinary değeriyle aynı değildir. Daha fazla bilgi için sonraki "Yerel Saat Ayarlaması" bölümüne bakın.

DateTime yapısı, belirtilen zaman değerinin yerel saat, Eşgüdümlü Evrensel Saat (UTC) veya bunlardan hiçbiri olup olmadığını gösteren özel bir Kind alanından ve 100 nanosaniyelik tıkların sayısını içeren özel bir Ticks alanıyla birleştirilmesinden oluşur.

Yerel saat ayarlaması

Yerel saat dilimine ayarlanmış Eşgüdümlü Evrensel Saat olan yerel saat, DateTime özelliği Kinddeğerine sahip olan bir Local yapısıyla temsil edilir. DateTime yöntemi tarafından oluşturulan ikili gösterimden yerel bir ToBinary değeri geri yüklerken, FromBinary yöntemi yeniden oluşturulan değeri özgün değere eşit olmayacak şekilde ayarlayabilir. Bu, aşağıdaki koşullar altında oluşabilir:

  • Yerel bir DateTime nesnesi ToBinary yöntemiyle bir saat diliminde seri hale getirilirse ve ardından FromBinary yöntemiyle farklı bir saat diliminde seri durumdan çıkarılırsa, sonuçta elde edilen DateTime nesnesi tarafından temsil edilen yerel saat otomatik olarak ikinci saat dilimine ayarlanır.

    Örneğin, saat 15:00'te yerel saati temsil eden bir DateTime nesnesi düşünün. ABD Pasifik Saat diliminde yürütülen bir uygulama, bu ToBinary nesnesini ikili değere dönüştürmek için DateTime yöntemini kullanır. Abd Doğu Saat diliminde yürütülen başka bir uygulama daha sonra ikili değeri yeni bir FromBinary nesnesine dönüştürmek için DateTime yöntemini kullanır. Yeni DateTime nesnesinin değeri 18:00'dir ve özgün 3 P.M. değeriyle aynı zaman noktasını temsil eder, ancak Doğu Saat dilimindeki yerel saate ayarlanır.

  • Yerel DateTime değerinin ikili gösterimi, FromBinary çağrıldığı sistemin yerel saat diliminde geçersiz bir saati temsil ederse, saat geçerli olacak şekilde ayarlanır.

    Örneğin, standart saatten gün ışığından yararlanma saatine geçiş, 14 Mart 2010'da, saat bir saat ilerlediğinde 02:00'de, saat 03:00'e kadar ABD Pasifik Saat diliminde gerçekleşir. Bu saat aralığı geçersiz bir saat, yani bu saat diliminde mevcut olmayan bir zaman aralığıdır. Aşağıdaki örnekte, bu aralık içinde kalan bir saat ToBinary yöntemiyle ikili değere dönüştürüldüğünde ve ardından FromBinary yöntemi tarafından geri yüklendiğinde özgün değerin geçerli bir saat olacak şekilde ayarlandığı gösterilmektedir. Örnekte gösterildiği gibi, belirli bir tarih ve saat değerinin TimeZoneInfo.IsInvalidTime yöntemine geçirerek değişikliğe tabi olup olmayacağını belirleyebilirsiniz.

    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