1

下面是我在 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 函数时会得到“异常”的数值结果?

?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
4

2 回答 2

1

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

编辑

如果您想看到类似毫秒的小变化,请尝试使用类似Now.ToFileTime

于 2013-01-08T18:25:34.697 回答
0

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

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

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

输出:

-8588439319484221453
-8588439319484221453
于 2013-01-08T19:49:09.550 回答