为什么now.tobinary给出两个不同的结果?

时间:2013-01-08 18:20:19

标签: vb.net

下面是我在VS2010中的即时窗口的复制和粘贴。请注意,Now函数的字符串表示形式是相同的,但它们的二进制表示形式却大不相同。从CDate中解开Now函数没有任何区别。为什么呢?

?CDate(Now)

1/8/2013 10:06:46 AM

?CDate(Now.ToString)

1/8/2013 10:06:52 AM

?CDate(Now.ToString).ToBinary

634932364230000000

?CDate(Now).ToBinary

-8588439384563815032

?Now.ToBinary

-8588439380551725996

请注意,我现在正在每条线路上使用完全相同的时间。当我使用ToString函数时,为什么会得到“abberant”数值结果?

?Now.ToBinary

-8588439366264255565

?datetime.FromBinary(-8588439366264255565)

1/8/2013 10:37:39 AM

?datetime.FromBinary(-8588439366264255565).ToBinary

-8588439366264255565

?cdate(datetime.FromBinary(-8588439366264255565).ToString ).ToBinary 

634932382590000000

?CDate(datetime.FromBinary(-8588439366264255565)).ToBinary

-8588439366264255565

2 个答案:

答案 0 :(得分:1)

`现在'保持不断变化的当前日期/时间。如果希望值保持不变 - 首先将其分配给变量,然后在代码的其余部分中使用该变量。

修改

如果您希望看到类似小毫秒的更改,请尝试使用Now.ToFileTime

之类的内容

答案 1 :(得分:0)

这是因为DateTime.Now具有毫秒精度,但是当您调用ToString时,不会打印毫秒。这两个日期不再相同了。

如果使用包含毫秒的格式打印日期,您将得到相同的结果:

Dim testDate = DateTime.Now()
Console.WriteLine(testDate.ToBinary)
Dim testDateToString = CDate(testDate.ToString("O"))
Console.WriteLine(testDateToString.ToBinary)

输出:

-8588439319484221453
-8588439319484221453