Share via


Metode System.DateTime.ToBinary dan FromBinary

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

ToBinary Gunakan metode untuk mengonversi nilai objek saat ini DateTime menjadi nilai biner. Selanjutnya, gunakan nilai biner dan FromBinary metode untuk membuat ulang objek asli DateTime .

Penting

Dalam beberapa kasus, nilai yang DateTime dikembalikan oleh metode tidak identik dengan FromBinary nilai asli DateTime yang disediakan ke ToBinary metode . Untuk informasi selengkapnya, lihat bagian berikutnya, "Penyesuaian Waktu Lokal".

DateTime Struktur terdiri dari bidang privatKind, yang menunjukkan apakah nilai waktu yang ditentukan didasarkan pada waktu lokal, Waktu Universal Terkoordinasi (UTC), atau tidak keduanya, digabungkan ke bidang privatTicks, yang berisi jumlah 100 tanda nanodetik yang menentukan tanggal dan waktu.

Penyesuaian waktu lokal

Waktu lokal, yang merupakan Waktu Universal Terkoordinasi yang disesuaikan dengan zona waktu lokal, diwakili oleh DateTime struktur yang propertinya Kind memiliki nilai Local. Saat memulihkan nilai lokal DateTime dari representasi biner yang dihasilkan oleh ToBinary metode , FromBinary metode dapat menyesuaikan nilai yang dibuat ulang sehingga tidak sama dengan nilai asli. Ini dapat terjadi dalam kondisi berikut:

  • Jika objek lokal DateTime diserialisasikan dalam satu zona waktu dengan ToBinary metode , dan kemudian dideserialisasi di zona waktu yang berbeda dengan FromBinary metode , waktu lokal yang diwakili oleh objek yang DateTime dihasilkan secara otomatis disesuaikan dengan zona waktu kedua.

    Misalnya, pertimbangkan DateTime objek yang mewakili waktu lokal 3 P.M. Aplikasi yang dijalankan di zona Waktu Pasifik A.S. menggunakan metode untuk mengonversi objek tersebut ToBinaryDateTime menjadi nilai biner. Aplikasi lain yang dijalankan di zona Waktu Timur AS kemudian menggunakan FromBinary metode untuk mengonversi nilai biner ke objek baru DateTime . Nilai objek baru DateTime adalah 6 P.M., yang mewakili titik waktu yang sama dengan nilai 3 P.M. asli, tetapi disesuaikan dengan waktu lokal di zona Waktu Timur.

  • Jika representasi biner dari nilai lokal DateTime mewakili waktu yang tidak valid di zona waktu lokal sistem yang FromBinary dipanggil, waktu disesuaikan sehingga valid.

    Misalnya, transisi dari waktu standar ke waktu musim panas terjadi di zona Waktu Pasifik Amerika Serikat pada 14 Maret 2010, pukul 02.00, ketika waktu maju satu jam, menjadi 03:00 A.M. Interval jam ini adalah waktu yang tidak valid, yaitu, interval waktu yang tidak ada di zona waktu ini. Contoh berikut menunjukkan bahwa ketika waktu yang termasuk dalam rentang ini dikonversi ke nilai biner dengan ToBinary metode dan kemudian dipulihkan oleh FromBinary metode , nilai asli disesuaikan untuk menjadi waktu yang valid. Anda dapat menentukan apakah nilai tanggal dan waktu tertentu mungkin tunduk pada modifikasi dengan meneruskannya ke TimeZoneInfo.IsInvalidTime metode , seperti yang diilustrasikan contohnya.

    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