【问题标题】:How do i get from Stopwatch.GetTimestamp() to a DateTime?我如何从 Stopwatch.GetTimestamp() 到 DateTime?
【发布时间】:2010-11-29 03:32:13
【问题描述】:

重复:How to get timestamp of tick precision in .NET / C#?
我如何从 Stopwatch.GetTimestamp() 到 DateTime

假设 Stopwatch.IsHighResolution 为真

【问题讨论】:

    标签: .net datetime stopwatch


    【解决方案1】:

    请记住,如果您尝试跟踪经过的时间,您应该使用:

    Stopwatch sw = Stopwatch.StartNew();
    //do stuff
    sw.Elapsed; //or
    sw.ElapsedMilliseconds;
    

    这可以准确地将刻度转换为实时。将刻度转换为 DateTime,然后比较 DateTimes 也可以,但上述方法更简单。

    有些人(包括我自己)错误地使用了这样的代码,并因此而陷入困境:

    startTime = Stopwatch.GetTimestamp();
    
    totalTime = (Stopwatch.GetTimestamp() - startTime) / 10000; 
    //it was assumed 10,000 ticks was a millisecond, incorrectly
    

    【讨论】:

    • Stopwatch.Frequency,即 pr 的刻度数。 sec,可用于更正您的上一个示例:elapsedMs = (Stopwatch.GetTimestamp() - startTime) / (Stopwatch.Frequency / 1000);
    【解决方案2】:

    如果是高分辨率计数器,则无法保证该值与实时有任何关联 - 例如,它很可能是“计算机启动后的滴答声”。对于-高分辨率计时器,您可以使用new DateTime(Stopwatch.GetTimestamp()),但这不一定会为高分辨率计时器提供有用的值。 (它当然不在我的盒子上。)

    你想用这个做什么? Stopwatch 的想法是测量时间的间隔

    【讨论】:

    • 想问为什么“没有相关性”?操作系统滴答是恒定的,因此 100 毫秒应该与任何时钟上的 100 毫秒非常相似(就间隔而言)。它们应该不同的唯一方法是在实时和操作系统滴答计数器初始化之间进行转换,对吗?初始化 Os 滴答计数器后,间隔长度应该与“任何”准确时钟的间隔长度相同?
    • @Mindaugas:系统时钟可能由于时区更改、手动时间校正或自动校正(例如通过 NTP。关键是,如果你想测量经过的时间,你可以使用秒表,但它不会给你一个 DateTime,因为它只测量经过的时间。
    • 非常感谢!我正在考虑更短的时间范围,但感谢您给予我更多的理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2021-03-08
    • 2019-12-26
    • 1970-01-01
    • 2010-09-23
    • 2014-07-06
    • 1970-01-01
    相关资源
    最近更新 更多