Serialize o DateTime como binário
Como serializar adequadamente um objeto DateTime (por exemplo, usando um BinaryWriter) e preservar seu estado completo?
Fiquei com a impressão de que uma data era representada apenas por um inteiro longo interno e que esse inteiro era acessível comoTicks
propriedade do DateTime. No entanto, olhando para a implementação, a propriedade Ticks na verdade retorna um subconjunto dos dados internos reais que são armazenados em um ulong chamadodateData
Ticks (que só recebe InternalTicks) é implementado da seguinte forma:
public long InternalTicks
{
get { return (long) this.dateData & 4611686018427387903L; }
}
Tanto quanto eu posso ver isso significa que o dateData pode conter informações que não são reveladas peloTicks
propriedade.
Ainda mais estranho, a serialização BinaryFormatter de um DateTime faz isso em GetObjectData ():
info.AddValue("ticks", this.InternalTicks);
info.AddValue("dateData", this.dateData);
Isso vai sairdois longs no fluxo, onde um deles seria facilmente recuperado do outro!
Como posso serializar meu DateTime sem o risco de perder qualquer estado interno (de preferência, é claro, em apenas 8 bytes e sem reflexão). Eu estou pensando que talvez possa ser lançado (inseguro), diretamente para um ulong?
Ou estou me preocupando sem motivo, será que oTicks
propriedade realmente codifica todo o estado necessário?