Kor*_*tak 4 .net c# datetime deserialization
这就是我尝试过的:
DateTime now = DateTime.Now;
long timeA = now.ToBinary();
long timeB = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond).ToBinary();
Debug.WriteLine("{0} {1}", timeA, timeB);
Run Code Online (Sandbox Code Playgroud)
这是输出:
-8588637543837682554 634734565017110000
Run Code Online (Sandbox Code Playgroud)
在timeA与timeB主要应同样的事情,但他们被转换成一个完全不同的(负)的二进制文件.
为什么会这样?为什么直接调用ToBinary()上DateTime.Now产生不同的结果?
编辑:由于我的问题被误解(并因此被低估)我已经纠正了我的帖子以更好地代表真正的问题.问题出在DateTime.Kind上,这是真正的问题,而不是连续两次DateTime.Now调用的小差异.
Cod*_*aos 10
你的两个值有不同Kind,并且类型也被序列化ToBinary.
DateTime.Nowhas Kind == DateTimeKind.Local,你创建的DateTime new DateTime(...)有Kind == DateTimeKind.Unspecified.new DateTime(...)如果你想要一个不同的类型,你可以使用另一个重载.
它们不是相同的DateTime值,所以这是预期的.
要处理相同的值,DateTime需要调用DateTime.Now一次然后重复使用它.
var now = DateTime.Now;
long timeA = now.ToBinary();
long timeB = new DateTime(now.Ticks, now.Kind).ToBinary();;
Console.WriteLine(timeA);
Console.WriteLine(timeB);
Run Code Online (Sandbox Code Playgroud)