从DateTime.Now获取高分辨率时间戳

Ala*_*lan 5 .net c# datetime

给定一个时间戳字符串来自另一台机器A到机器B(例如hh:mm:ss.fff),并假设两台机器的时钟同步,我怎样才能让机器B计算其时钟与来自机器A的字符串中的时间之间的时间跨度?

我试过比较DateTime.Now.Ticks,但分辨率似乎是10-20毫秒.我想计算更接近1毫秒的分辨率.

一段时间以来,我已经成功地Stopwatch.GetTimestamp()用于高分辨率计时,但请记住它不是那么简单,因为我只有机器B中可用的字符串,并且没有很好的方法来校准Stopwatch.GetTimestamp实际的系统时间.

que*_*atl 3

DateTime.Now 使用底层操作系统的日期,其分辨率约为 15 毫秒,对于 Windows XP 之前的系统甚至更差。您可以获得的最好的结果是秒表及其滴答/时钟中提供的高分辨率计时器。

您必须首先同步时钟,但这并不意味着“设置系统的日期”。同步时钟意味着计算读数之间的差异,可以选择验证它是否随着时间的推移保持恒定(即,检查是否没有一个时钟计数得比其他时钟快),然后使用计算出的偏移量来偏移读数,以便“实际值”是在同一时间基础上相对的——这是你的选择。

谷歌搜索“时钟同步算法”以阅读更多相关内容。