Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Anmärkning
Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.
ToBinary Använd metoden för att konvertera värdet för det aktuella DateTime objektet till ett binärt värde. Därefter använder du det binära värdet och FromBinary metoden för att återskapa det ursprungliga DateTime objektet.
Viktigt!
I vissa fall är värdet DateTime som returneras av FromBinary metoden inte identiskt med det ursprungliga DateTime värdet som angavs för ToBinary metoden. Mer information finns i nästa avsnitt, "Lokal tidsjustering".
En DateTime struktur består av ett privat Kind fält som anger om det angivna tidsvärdet baseras på lokal tid, UTC (Coordinated Universal Time) eller ingetdera, sammanfogat till ett privat Ticks fält, som innehåller antalet tick på 100 nanosekunder som anger ett datum och en tid.
Lokal tidsjustering
En lokal tid, som är en samordnad universell tid justerad till den lokala tidszonen, representeras av en DateTime struktur vars Kind egenskap har värdet Local. När du återställer ett lokalt DateTime värde från den binära representation som skapas av ToBinary metoden kan FromBinary metoden justera det återskapade värdet så att det inte är lika med det ursprungliga värdet. Detta kan inträffa under följande förhållanden:
Om ett lokalt DateTime objekt serialiseras i en tidszon med ToBinary metoden och sedan deserialiseras i en annan tidszon efter FromBinary metoden, justeras den lokala tid som representeras av det resulterande DateTime objektet automatiskt till den andra tidszonen.
Tänk dig till exempel ett DateTime objekt som representerar en lokal tid på 15.00. Ett program som körs i tidszonen US Pacific använder ToBinary metoden för att konvertera objektet DateTime till ett binärt värde. Ett annat program som körs i den amerikanska östra tidszonen FromBinary använder sedan metoden för att konvertera det binära värdet till ett nytt DateTime objekt. Värdet för det nya DateTime objektet är 18.00, vilket representerar samma tidpunkt som det ursprungliga 15:00-värdet, men justeras till lokal tid i den östra tidszonen.
Om den binära representationen av ett lokalt DateTime värde representerar en ogiltig tid i den lokala tidszonen i systemet som FromBinary anropas, justeras tiden så att den är giltig.
Övergången från standardtid till sommartid sker till exempel i Pacific Time-zonen i USA den 14 mars 2010 kl. 02:00, när tiden går framåt med en timme till 03:00. Det här timintervallet är en ogiltig tid, dvs. ett tidsintervall som inte finns i den här tidszonen. Följande exempel visar att när en tid som ligger inom det här intervallet konverteras till ett binärt värde med ToBinary metoden och sedan återställs av FromBinary metoden justeras det ursprungliga värdet så att det blir en giltig tid. Du kan avgöra om ett visst datum- och tidsvärde kan ändras genom att skicka det till TimeZoneInfo.IsInvalidTime metoden, som exemplet illustrerar.
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: Falseopen 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: FalseModule 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