为什么DateTime.Now.ToBinary()返回的值不同于构造函数创建的值

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)

timeAtimeB主要应同样的事情,但他们被转换成一个完全不同的(负)的二进制文件.

为什么会这样?为什么直接调用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(...)如果你想要一个不同的类型,你可以使用另一个重载.


Joã*_*elo 6

它们不是相同的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)