Come si serializza correttamente un oggetto DateTime (ad esempio utilizzando un BinaryWriter) e si conserva il suo stato completo?Serialize DateTime as binary
Avevo l'impressione che una data fosse rappresentata solo da un intero interno lungo e che questo numero intero fosse accessibile come la proprietà Ticks
di DateTime. Tuttavia, guardando l'attuazione, la proprietà zecche restituisce in realtà un sottoinsieme di dati interno vero e proprio che è memorizzato in un ulong chiamato dateData
zecche (che ottiene appena InternalTicks) è implementato in questo modo:
public long InternalTicks
{
get { return (long) this.dateData & 4611686018427387903L; }
}
Per quanto posso vedere, questo significa che dateData potrebbe contenere informazioni non rivelate dalla proprietà Ticks
.
Stranger ancora, il BinaryFormatter serializzazione di un DateTime fa in GetObjectData():
info.AddValue("ticks", this.InternalTicks);
info.AddValue("dateData", this.dateData);
che sarà in uscita due anela nel flusso, dove uno di loro sarebbero facilmente recovererd dall'altro!
Come è possibile serializzare il mio DateTime senza il rischio di perdere nessuno degli stati interni, (preferibilmente ovviamente in soli 8 byte e senza riflessione). Sto pensando che forse può essere lanciato (non sicuro), direttamente a un ulong?
O mi preoccupo senza motivo, la proprietà Ticks
codificherà effettivamente tutto lo stato necessario?
Personalmente userei solo 'DateTim e' per le date 'UTC' e' DateTimeOffset' per le date locali. Quindi non devi preoccuparti di memorizzare il "Kind", è semplicemente sempre "UTC". – CodesInChaos
Non controllo il tipo degli orari di data serializzati. –