【问题标题】:Why is DateTime.Now.Ticks not consistent?为什么 DateTime.Now.Ticks 不一致?
【发布时间】:2014-01-21 08:30:21
【问题描述】:

我有一个简单的控制台应用程序,其主体如下:

Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());
Console.WriteLine(DateTime.Now.Ticks.ToString());

这些是三个不同运行的输出:

635258949900018675
635258949900028676   // +10001
635258949900028676   // +0
635258949900038677   // +10001
635258949900038677   // +0
635258949900038677   // +0
635258949900038677   // +0
635258949900038677   // +0
635258949900038677   // +0
635258949900038677   // +0

635258949937502423
635258949937512424   // +10001
635258949937512424   // +0
635258949937512424   // +0
635258949937512424   // +0
635258949937522425   // +10001
635258949937522425   // +0
635258949937522425   // +0
635258949937522425   // +0
635258949937522425   // +0

635258961813519906
635258961813529907   // +10001
635258961813529907   // +0
635258961813529907   // +0
635258961813529907   // +0
635258961813539908   // +10001
635258961813539908   // +0
635258961813539908   // +0
635258961813539908   // +0
635258961813539908   // +0

人们可能会猜测这些值不同是正常的,因为在 Console.WriteLine 执行之间需要时间。行之间的间隔是一个常数值 10001,但不知何故,这个值不会在每一步都添加到前一个值。有时是,有时不是。我想知道为什么会这样。

【问题讨论】:

  • 不清楚你在问什么 - 据我所知,两个不同值之间的间隔似乎总是 10001 滴答。您真的只是在问为什么更改之间的调用次数不同吗?如果是这样,请记住您的机器中发生了多少事情 - 以及有多少事情可以变化。
  • 对不起。我的意思是它不会在每一步都增加 10001。有时会增加,有时不会。
  • 谢谢@JonSkeet。您几乎总是回答与日期时间相关的问题 :)。我希望你能看到我一直在寻找答案的另一个问题。我知道你没有太多时间,但你能分享你对此的看法吗?提前致谢。 stackoverflow.com/questions/20924278/…
  • 老实说,你得到的答案对我来说看起来不错。这可能就是我写的。
  • 感谢您的打扰。

标签: c# datetime


【解决方案1】:

虽然 Datetime 会定期更新(并非每次滴答都会发生),但您可以像这样使用秒表更准确地测量时间:

var sw = new Stopwatch ();
sw.Start ();
//Run some code
Console.WriteLine (sw.ElapsedMilliseconds);

【讨论】:

    【解决方案2】:

    Eric Lippert 对这个话题有一个很好的article。关键引用:

    “挂钟”计时器的用途是生成日期和时间 用于典型的现实世界用途,例如“神秘博士什么时候开始?” 或“我们什么时候改成夏令时?”或“给我看 我上周四午饭后编辑的文件。”这些不是 需要亚微秒级精度的操作。

    【讨论】:

      【解决方案3】:

      引用乔恩:

      你真的只是在问为什么有不同数量的来电 变化之间?如果是这样,请记住您的 机器 - 有多少东西可以变化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-03
        • 2013-03-09
        • 2020-02-29
        • 2014-07-05
        • 2018-08-05
        相关资源
        最近更新 更多