Serialisieren Sie DateTime als Binärdatei

Wie kann ich ein DateTime-Objekt ordnungsgemäß serialisieren (z. B. mit einem BinaryWriter) und seinen vollständigen Status beibehalten?

Ich hatte den Eindruck, dass eine Datumszeit nur durch eine interne lange Ganzzahl dargestellt wird und dass diese Ganzzahl als die zugänglich istTicks Eigentum von DateTime. Bei der Implementierung gibt die Ticks-Eigenschaft jedoch tatsächlich eine Teilmenge der realen internen Daten zurück, die in einem ulong namens gespeichert sinddateData

Ticks (die nur InternalTicks bekommen) ist wie folgt implementiert:

public long InternalTicks
{
    get { return (long) this.dateData & 4611686018427387903L; }
}

Soweit ich das sehe, können die dateData Informationen enthalten, die von derTicks Eigentum.

Noch seltsamer ist, dass die BinaryFormatter-Serialisierung einer DateTime dies in GetObjectData () ausführt:

info.AddValue("ticks", this.InternalTicks);
info.AddValue("dateData", this.dateData);

Das wird ausgegebenzwei sehnt sich in den Bach, wo einer von ihnen leicht von dem anderen erholt werden würde!

Wie kann ich meine DateTime serialisieren, ohne dass das Risiko besteht, dass der interne Status verloren geht (am besten in nur 8 Bytes und ohne Reflektion)? Ich denke, vielleicht kann es gegossen werden (unsicher), direkt zu einem ulong?

Oder mache ich mir ohne Grund Sorgen?Ticks Eigenschaft kodieren tatsächlich alle notwendigen Zustand?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage