152

我正在制作一个程序,我需要以毫秒为单位获取时间。时间,我的意思是一个永远不等于自己的数字,并且总是比一秒钟前大 1000 个数字。我已经尝试转换DateTime.Now为 aTimeSpanTotalMilliseconds从中获取...但我听说它并不完全准确。

有没有更简单的方法来做到这一点?

4

10 回答 10

393
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

这实际上是在DateTimeOffset类中实现各种 Unix 转换方法的方式(.NET Framework 4.6+、.NET Standard 1.3+):

long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
于 2010-10-25T16:07:04.560 回答
81

使用Stopwatch类。

提供一组可用于准确测量经过时间的方法和属性。

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

性能测试:使用 System.Diagnostics.Stopwatch 进行精确的运行时间测量

于 2010-10-25T16:05:37.837 回答
16

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

10,000 次滴答是一毫秒(每秒 10,000,000 次滴答)。

于 2010-10-25T16:05:24.600 回答
12

我使用以下课程。我曾经在互联网上找到它,假设是最好的NOW()

/// <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); } }
}

来源不明。

于 2013-02-24T12:59:00.587 回答
8

你可以试试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;
     }
 }
于 2010-10-25T16:06:32.157 回答
5

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

于 2012-08-17T09:57:00.287 回答
2

使用System.DateTime.Now.ToUniversalTime(). 这使您的读数采用已知的基于参考的毫秒格式,完全消除了日期变化等。

于 2012-09-17T17:07:45.107 回答
2

使用 Stopwatch 类,我们可以从System.Diagnostics.

Stopwatch stopwatch  = new Stopwatch();
stopwatch.Start();
stopwatch.Stop();
Debug.WriteLine(stopwatch.ElapsedMilliseconds);
于 2020-11-25T06:00:47.380 回答
0

System.DateTimeOffset.Now.ToString("MM/dd/yyyy hh:mm:ss.fff tt")以 '04/01/2021 04:32:14 的格式获取毫秒。下午788点'

https://docs.microsoft.com/en-us/dotnet/standard/base-types/how-to-display-milliseconds-in-date-and-time-values

于 2021-04-01T23:34:53.857 回答
0

据我了解您的要求Environment.TickCount符合要求。它返回自启动以来的毫秒数,因此它总是增加并可用于计算以毫秒为单位的经过时间。如果您还想要绝对时间,您可以获取当前时间和当前 Environment.TickCount,并根据该时间和新 Environment.TickCount 计算新的绝对时间。

于 2021-09-05T13:52:06.680 回答