给定一个时间戳字符串来自另一台机器A到机器B(例如,hh:mm:ss.fff
)并假设两台机器的时钟同步,我怎么能让机器B计算它的时钟和时间之间的时间跨度在来自机器A的字符串中?
我尝试与DateTime.Now.Ticks
进行比较,但分辨率似乎是10-20毫秒。我想计算接近1 ms的分辨率。
一段时间以来,我已成功使用Stopwatch.GetTimestamp()
进行高分辨率计时,但请记住,这并不是那么简单,因为我只有机器B中可用的字符串,并没有很好的方法用实际系统时间校准Stopwatch.GetTimestamp
。
答案 0 :(得分:3)
DateTime.Now使用底层操作系统的日期,其分辨率约为15毫秒,甚至更糟糕的是Windows XP之前的系统。您可以获得的最佳效果是高分辨率计时器,它可以在秒表及其刻度/时钟中使用。
您必须首先同步时钟,但不要意味着“设置系统的日期”。同步时钟意味着计算读数之间的差异,可选地验证它是否随着时间流动而变化(即,检查时钟中的任何一个是否比其他时钟更快),然后使用计算的偏移量来..抵消读数,使“实际值”在相同的时基上是相对的 - 这是你选择的。
谷歌的“时钟同步算法”可以阅读更多关于它的信息。
答案 1 :(得分:2)
你不能做类似的事情: