Unix 时间 - 纳秒?

Aci*_*dic 4 c# visual-studio-2010

我当前使用此方法(C#)来获取以毫秒为单位的 Unix 时间:

long UnixTime()
{
    return (long) (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)).TotalMilliseconds;
}   
Run Code Online (Sandbox Code Playgroud)

问题- 有没有办法获得以纳秒为单位的unix时间?

提前致谢。

Cod*_*aos 5

计算本身并不难:

long UnixTime()
{
    DateTime epochStart=new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
    return (DateTime.UtcNow - epochStart).Ticks*100;
}
Run Code Online (Sandbox Code Playgroud)

DateTime内部TimeSpan存储整数个tick,1个tick为100ns。我还将纪元开始指定为 UTC 时间,因为我认为 DateTime用 different 减去 s很丑陋Kind,即使它有效。

DateTime.UtcNow准确率很低。它仅每隔几毫秒更新一次(典型值在 1ms 到 16ms 之间变化)。


要获得恒定的帧速率,您可以使用,StopWatch因为您不需要绝对时间。但如果你走那条路,你必须使用忙碌的等待。由于Thread.Sleep、计时器...也受到同样的限制。

或者,您可以使用timeBeginPeriod(1)API 强制 Windows 更新时钟并每 1 毫秒运行一次计时器。但这是全局设置并会增加功耗。不过,这比忙着等待要好。

要测量时间差异,您可以使用StopWatchis based on QueryPerformanceCounter,但这会带来一系列问题,例如不同核心之间的不同步。我见过QueryPerformanceCounter当你的线程被安排在另一个核心上时,机器会跳跃数百毫秒。