我的代码需要一个非常精确的时间戳。我使用这篇文章的第一个解决方案:
How to get timestamp of tick precision in .NET / C#?
<system.data>
<DbProviderFactories>
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
<add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=2.2.7.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" support="FF" />
</DbProviderFactories>
</system.data>
然后用
调用它DateTime _starttime = DateTime.UtcNow;
Stopwatch _stopwatch = Stopwatch.StartNew();
但是当我想用DateTime highresDT = _starttime.AddTicks(_stopwatch.Elapsed.Ticks);
我只有:
MessageBox.Show(highresDT.ToString());
我想要毫秒显示。可能吗?!谢谢。
我是c#的新手,我可能完全误解了我的问题。
答案 0 :(得分:4)
您可以使用MessageBox.Show(highresDT.ToString("MM/dd/yyyy hh:mm:ss.fff tt"));
答案 1 :(得分:2)
此代码不会像您认为的那样工作:
DateTime _starttime = DateTime.UtcNow;
Stopwatch _stopwatch = Stopwatch.StartNew();
充其量,您的准确度将为10-15毫秒。
原因是UtcNow每个线程量程只更新一次。在多核计算机上的Windows上,线程量程为15毫秒;每10毫秒单核机器。
秒表具有非常高的精度和非常高的精度,因此可以做得更好。我将举例说明。
如果你有一个真正的秒表,你可以以某种方式使用并获得1毫秒的精度和准确度,你可以采取只显示小时和分钟并做得更好的闹钟吗?
你可以。您可以使用秒表非常准确地测量时间的流逝。你可以看到闹钟,看看它从上午11:14到11:15结束时是什么时候。
例如,如果您观察到以下一组事件:
然后你知道那里的某个地方,时间恰好是11:15:00.0000 ......你知道它发生在一段时间内只有2毫秒,因为你的秒表告诉你了。< / p>
所以现在你知道秒表值12001 +/- 1 ms == 11:15:00.000000
您可以将同样的概念应用于DateTime.UtcNow()和StopWatch。
如果你在一个循环中看到秒表和utcnow,并且你看到UtcNow从11:14:31.030到11:14:31.045打勾,那么你知道那里的时间正好是31.04500000 - 而你的秒表会告诉你实际经过了多少物理时间,因此你知道你有多少错误。
答案 2 :(得分:1)
请参阅Microsoft的此示例: https://msdn.microsoft.com/en-us/library/bb882581(v=vs.110).aspx
您需要使用“hh:mm:ss.fff”对其进行格式化。 fff是milisecond的格式。
答案 3 :(得分:1)
此文档 - Custom Date and Time Format Strings - 可供参考。您可以构造一个格式字符串,准确显示所需的元素。例如,
MessageBox.Show(highresDT.ToString(&#34; dd / MM / yyyy HH:mm:ss fff&#34;));
fff
表示格式化字符串应包含毫秒。 (&#39; FFF`如果值为零则省略毫秒。)