Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
Este artigo fornece observações complementares à documentação de referência para esta API.
Use o método ToBinary para converter o valor do objeto DateTime atual em um valor binário. Posteriormente, use o valor binário e o método FromBinary para recriar o objeto DateTime original.
Importante
Em alguns casos, o valor DateTime retornado pelo método FromBinary não é idêntico ao valor DateTime original fornecido ao método ToBinary. Para obter mais informações, consulte a próxima seção, "Ajuste de hora local".
Uma estrutura DateTime consiste em um campo Kind privado, que indica se o valor de hora especificado é baseado na hora local, Tempo Universal Coordenado (UTC) ou nenhum dos dois, concatenado a um campo Ticks privado, que contém o número de ticks de 100 nanossegundos que especificam uma data e uma hora.
Ajuste do horário local
Uma hora local, que é um Tempo Universal Coordenado ajustado ao fuso horário local, é representada por uma estrutura DateTime cuja propriedade Kind tem o valor Local. Ao restaurar um valor DateTime local da representação binária que é produzida pelo método ToBinary, o método FromBinary pode ajustar o valor recriado para que ele não seja igual ao valor original. Isso pode ocorrer nas seguintes condições:
Se um objeto DateTime local é serializado em um fuso horário pelo método ToBinary e, em seguida, desserializado em um fuso horário diferente pelo método FromBinary, a hora local representada pelo objeto DateTime resultante é automaticamente ajustada para o segundo fuso horário.
Por exemplo, considere um objeto DateTime que representa uma hora local de 3 P.M. Um aplicativo que está sendo executado no fuso horário do Pacífico dos EUA usa o método ToBinary para converter esse objeto DateTime em um valor binário. Outro aplicativo que está sendo executado no fuso horário leste dos EUA, em seguida, usa o método FromBinary para converter o valor binário em um novo objeto DateTime. O valor do novo objeto DateTime é 6 P.M., que representa o mesmo ponto no tempo que o valor original de 3 P.M., mas é ajustado para a hora local no fuso horário do Leste.
Se a representação binária de um valor DateTime local representar uma hora inválida no fuso horário local do sistema no qual FromBinary é chamado, a hora será ajustada para que seja válida.
Por exemplo, a transição do horário padrão para o horário de verão ocorre no fuso horário do Pacífico dos Estados Unidos em 14 de março de 2010, às 2h00, quando o horário avança uma hora, para 3h00. Este intervalo de horas é uma hora inválida, ou seja, um intervalo de tempo que não existe neste fuso horário. O exemplo a seguir mostra que quando um tempo que se enquadra nesse intervalo é convertido em um valor binário pelo método ToBinary e, em seguida, é restaurado pelo método FromBinary, o valor original é ajustado para se tornar um tempo válido. Você pode determinar se um determinado valor de data e hora pode estar sujeito a modificação passando-o para o método TimeZoneInfo.IsInvalidTime, como ilustra o exemplo.
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