DateTime オブジェクトを適切にシリアル化し (BinaryWriter を使用するなど)、その完全な状態を保持するにはどうすればよいですか?
日時は内部の長整数でのみ表され、この整数はTicks
DateTime のプロパティとしてアクセスできるという印象を受けました。ただし、実装を見ると、Ticks プロパティは実際には、呼び出された ulong に格納されている実際の内部データのサブセットを返します。dateData
Ticks (InternalTicks を取得するだけ) は次のように実装されます。
public long InternalTicks
{
get { return (long) this.dateData & 4611686018427387903L; }
}
私が見る限り、これは、Ticks
プロパティによって明らかにされていない情報が dateData に含まれている可能性があることを意味します。
見知らぬ人ですが、DateTime の BinaryFormatter Serialization は GetObjectData() でこれを行います。
info.AddValue("ticks", this.InternalTicks);
info.AddValue("dateData", this.dateData);
これにより、ストリームに2 つのlongが出力され、そのうちの 1 つは他のものから簡単に回復できます。
内部状態を失うリスクなしに DateTime をシリアル化するにはどうすればよいですか (もちろん、8 バイトだけでリフレクションなしで行うことが望ましい)。ulongに直接キャスト(安全でない)できるのではないかと考えていますか?
それとも、理由もなく心配していTicks
ますか?プロパティは実際に必要なすべての状態をエンコードしますか?