<div>I previously discussed this patch on the mono IRC channel.</div><div><br></div>Motivation:<div><br></div><div>1. The current DateTime implementation is not binary compatible (with BinaryFormatter) with .NET&#39;s DateTime.  There are many bugs on the tracker related to this issue:</div>
<div><br></div><div><a href="https://bugzilla.novell.com/show_bug.cgi?id=321869">https://bugzilla.novell.com/show_bug.cgi?id=321869</a></div><div><a href="https://bugzilla.novell.com/show_bug.cgi?id=325067">https://bugzilla.novell.com/show_bug.cgi?id=325067</a></div>
<div><a href="https://bugzilla.novell.com/show_bug.cgi?id=360429">https://bugzilla.novell.com/show_bug.cgi?id=360429</a></div><div><br></div><div>My patch fixes this issue.  With BinaryFormatter, I serialized several DateTimes (with different DateTimeKinds) from Visual Studio and was able to successfully load them after the patch and tested that they were equivalent.</div>
<div><br></div><div>2. The current DateTime takes up 16 bytes.  The .NET one takes up 8 bytes.  This is the primary reason for the above incompatibility.  Mono&#39;s extra field was a &quot;DateTimeKind kind&quot;.  I simply removed that and used flag bits on the ticks field to indicate the kind so as to be compatible with .NET.</div>
<div><br></div><div>The size difference is an issue for me, because I currently load 50 million DateTime records into memory, and 50 million * 8 bytes extra == 400 megabytes extra RAM used.</div><div><div><br></div><div><br>
</div><div>Caveats:</div><div><br></div><div>This new DateTime is binary incompatible (again with BinaryFormatter) with older versions of Mono.</div><div><br></div><div><br></div><div>Please look over the contents of the patch as I am very new to C#.  I welcome any comments.</div>
<div><br></div><div>Thanks,</div><div>Jonathan Hseu</div></div>