重复:How to get timestamp of tick precision in .NET/C#?
如何从Stopwatch.GetTimestamp()得到一个DateTime我如何从Stopwatch.GetTimestamp()获取DateTime?的
假设Stopwatch.IsHighResolution如果它是一个高分辨率计数器是真的
重复:How to get timestamp of tick precision in .NET/C#?
如何从Stopwatch.GetTimestamp()得到一个DateTime我如何从Stopwatch.GetTimestamp()获取DateTime?的
假设Stopwatch.IsHighResolution如果它是一个高分辨率计数器是真的
,但也不能保证该值有什么与实时相关 - 例如,它可能是“自计算机启动以来的滴答声”。对于非-高分辨率定时器,您可以使用new DateTime(Stopwatch.GetTimestamp())
,但这不一定会为高分辨率定时器提供有用的值。 (它肯定不在我的盒子里。)
你想用这个做什么? Stopwatch
的想法是测量间隔的时间。
想问为什么“不相关”?操作系统的时钟周期是不变的,所以在任何时钟(间隔)上,100毫秒应该非常接近100毫秒。他们应该不同的唯一方法是实时和OS刻度计数器初始化之间的转换,是正确的吗?在Os ticks计数器初始化之后,间隔长度应该与“任何”精确时钟相同? – 2017-07-27 08:59:35
@Mindaugas:系统时钟可能因时区变化,手动时间校正或自动校正等原因而发生变化。通过NTP。重点是如果你想测量经过的时间,你使用秒表,但*不会给你一个日期时间,因为它只测量经过的时间。 – 2017-07-27 11:14:02
非常感谢!我在考虑缩短时间范围,但感谢给我更多的理解。 – 2017-07-27 11:31:29
请记住,如果你想跟踪经过的时间,你应该使用:
Stopwatch sw = Stopwatch.StartNew();
//do stuff
sw.Elapsed; //or
sw.ElapsedMilliseconds;
这准确地转换蜱实时。将ticks转换为DateTime,然后比较DateTimes也可以,但上面更简单。
一些(包括我自己)都错误地使用这样的代码,并得到了它不好的时候:
startTime = Stopwatch.GetTimestamp();
totalTime = (Stopwatch.GetTimestamp() - startTime)/10000;
//it was assumed 10,000 ticks was a millisecond, incorrectly
Stopwatch.Frequency,这是ticks的数量pr。秒,可以用来纠正你的最后一个例子:elapsedMs =(Stopwatch.GetTimestamp() - startTime)/(Stopwatch.Frequency/1000); – Jens 2016-11-11 10:19:59
为什么不使用DateTime.Now? – deostroll 2009-09-17 12:52:12