我正在制作一个程序,我需要在几毫秒内获得时间。到时候,我的意思是一个永远不会与自己相等的数字,并且总是比一秒钟前更大的1000个数字。我已尝试将DateTime.Now
转换为TimeSpan
并从中获取TotalMilliseconds
...但我听说它不完全准确。
有更简单的方法吗?
答案 0 :(得分:268)
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
这实际上是如何在DateTimeOffset
类(.NET Framework 4.6 +,.NET Standard 1.3 +)中实现各种Unix转换方法:
long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
答案 1 :(得分:74)
使用Stopwatch
类。
提供一组方法和 您可以使用的属性 准确地测量经过的时间。
这里有一些很好的信息来实现它:
Performance Tests: Precise Run Time Measurements with System.Diagnostics.Stopwatch
答案 2 :(得分:13)
DateTime.Ticks
属性获取表示日期和时间的刻度数。
10,000蜱是一毫秒(每秒10,000,000蜱)。
答案 3 :(得分:8)
您可以尝试使用QueryPerformanceCounter
原生方法。有关详细信息,请参阅http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter.html。这是Stopwatch
类使用的。
有关详细信息,请参阅How to get timestamp of tick precision in .NET / C#?。
Stopwatch.GetTimestamp()
可以访问此方法:
public static long GetTimestamp() {
if(IsHighResolution) {
long timestamp = 0;
SafeNativeMethods.QueryPerformanceCounter(out timestamp);
return timestamp;
}
else {
return DateTime.UtcNow.Ticks;
}
}
答案 4 :(得分:7)
我使用以下课程。我在互联网上找到了一次,假设是最好的 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); } }
}
来源不明。
答案 5 :(得分:5)
我使用DateTime.Now.TimeOfDay.TotalMilliseconds(当天),希望它也可以帮助你。
答案 6 :(得分:1)
使用System.DateTime.Now.ToUniversalTime()
。这使得您的读数采用已知的基于参考的毫秒格式,完全消除了日期变化等。
答案 7 :(得分:1)
使用秒表类,我们可以从System.Diagnostics
中实现它。
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
stopwatch.Stop();
Debug.WriteLine(stopwatch.ElapsedMilliseconds);
答案 8 :(得分:0)
System.DateTimeOffset.Now.ToString("MM/dd/yyyy hh:mm:ss.fff tt")
以“04/01/2021 04:32:14.788 PM”的格式获取毫秒