使用 C # 获取以毫秒为单位的时间

我正在编写一个程序,它需要以毫秒为单位计算时间。时间,我指的是一个永远不等于自身的数字,它总是比一秒钟前大1000个数字。我试过把 DateTime.Now转换成 TimeSpan,然后从中得到 TotalMilliseconds... ... 但我听说它并不完全准确。

有更简单的方法吗?

393155 次浏览

DateTime.Ticks属性获取表示日期和时间的刻度数。

10,000 Ticks 是一毫秒(每秒10,000,000 Ticks)。

使用 Stopwatch类。

提供一组方法和 可用于 精确测量运行时间。

这里有一些关于实现它的好信息:

性能测试: 精确的运行时间测量与系统。诊断。秒表

您可以尝试使用 QueryPerformanceCounter本机方法。请参阅 http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter.html了解更多信息。这是 Stopwatch类使用的方法。

有关更多信息,请参见 如何在.NET/C # 中获得刻度精度的时间戳?

Stopwatch.GetTimestamp()提供了对这种方法的访问:

public static long GetTimestamp() {
if(IsHighResolution) {
long timestamp = 0;
SafeNativeMethods.QueryPerformanceCounter(out timestamp);
return timestamp;
}
else {
return DateTime.UtcNow.Ticks;
}
}
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

这实际上是各种 Unix 转换方法在 DateTimeOffset类(。NET Framework 4.6 + ,.NET 标准1.3 +) :

long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();

我使用了 DateTime。 Now。 TimeOfDay。 TotalMilliseconds (当前天) ,希望它也能帮到你。

使用 System.DateTime.Now.ToUniversalTime()。这使你的阅读以一个已知的基于参考的毫秒格式,完全消除了日变等。

我使用下面的课程。我在网上找到它一次,假设是最好的 现在

/// <summary>Class to get current timestamp with enough precision</summary>
static class CurrentMillis
{
private static readonly DateTime Jan1St1970 = new DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
/// <summary>Get extra long current timestamp</summary>
public static long Millis { get { return (long)((DateTime.UtcNow - Jan1St1970).TotalMilliseconds); } }
}

来源不明。

使用秒表类,我们可以从 System.Diagnostics实现它。

Stopwatch stopwatch  = new Stopwatch();
stopwatch.Start();
stopwatch.Stop();
Debug.WriteLine(stopwatch.ElapsedMilliseconds);

据我所知,你们的要求 环境,票数符合要求。它返回自启动以来的毫秒数,因此它总是增加,并且可以用来计算以毫秒为单位的运行时间。如果你也想要绝对时间,你可以得到当前时间和当前环境。并根据该时间和新环境计算新的绝对时间。票数。