我正在制作一个程序,我需要以毫秒为单位获取时间。时间,我的意思是一个永远不等于自己的数字,并且总是比一秒钟前大 1000 个数字。我已经尝试转换DateTime.Now
为 aTimeSpan
并TotalMilliseconds
从中获取...但我听说它并不完全准确。
有没有更简单的方法来做到这一点?
我正在制作一个程序,我需要以毫秒为单位获取时间。时间,我的意思是一个永远不等于自己的数字,并且总是比一秒钟前大 1000 个数字。我已经尝试转换DateTime.Now
为 aTimeSpan
并TotalMilliseconds
从中获取...但我听说它并不完全准确。
有没有更简单的方法来做到这一点?
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
这实际上是在DateTimeOffset
类中实现各种 Unix 转换方法的方式(.NET Framework 4.6+、.NET Standard 1.3+):
long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
该DateTime.Ticks
属性获取表示日期和时间的刻度数。
10,000 次滴答是一毫秒(每秒 10,000,000 次滴答)。
我使用以下课程。我曾经在互联网上找到它,假设是最好的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); } }
}
来源不明。
你可以试试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;
}
}
我使用了 DateTime.Now.TimeOfDay.TotalMilliseconds (当天),希望它也能帮助你。
使用System.DateTime.Now.ToUniversalTime()
. 这使您的读数采用已知的基于参考的毫秒格式,完全消除了日期变化等。
使用 Stopwatch 类,我们可以从System.Diagnostics
.
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
stopwatch.Stop();
Debug.WriteLine(stopwatch.ElapsedMilliseconds);
System.DateTimeOffset.Now.ToString("MM/dd/yyyy hh:mm:ss.fff tt")
以 '04/01/2021 04:32:14 的格式获取毫秒。下午788点'
据我了解您的要求Environment.TickCount符合要求。它返回自启动以来的毫秒数,因此它总是增加并可用于计算以毫秒为单位的经过时间。如果您还想要绝对时间,您可以获取当前时间和当前 Environment.TickCount,并根据该时间和新 Environment.TickCount 计算新的绝对时间。