GetLocalTime,Kernel32.dll,Windows 7的准确度是多少?

时间:2012-02-20 20:22:34

标签: c# datetime

我想获得最准确的(1ms准确度非常好)时间。 我看到这个使用GetLocalTime的例子:

using System;
using System.Runtime.InteropServices;    

[StructLayout(LayoutKind.Sequential)]
public class SystemTime
{
    public ushort year;
    public ushort month;
    public ushort weekday;
    public ushort day;
    public ushort hour;
    public ushort minute;
    public ushort second;
    public ushort millisecond;
}

public class LibWrap
{
    [DllImport("Kernel32.dll")]
    public static extern void GetLocalTime([In, Out] SystemTime st);
}

public class App
{
    public static void Main()
    {
        SystemTime st = new SystemTime();
        LibWrap.GetLocalTime(st);
        Console.Write("{0}:{1}:{2}.{3}", st.hour, st.minute, st.second, st.millisecond);
        Console.ReadKey();
    }
}

准确度是多少?

1 个答案:

答案 0 :(得分:3)

最有可能是计时器的准确性。默认情况下为16ms(在较新版本的Windows上),使用timeBeginPeriod(1)可以减少到1ms(可能会增加计算机的功耗)。

Windows上的所有“绝对时间”功能我知道以定时器精度工作。所以我希望它不会比DateTime.Now更好或更差。

相对时间函数(StopWatchQueryPerformanceCounter)具有更高的准确性,但没有给出有意义的绝对时间。它们还可能遇到跨多个CPU核心的同步问题。

但是你为什么不测试它:编写一个读取时间的小程序,并在它增加时打印它。对DateTime.Now执行相同操作。并进行比较。