如何在我的日期时间显示毫秒

时间:2016-06-30 15:04:20

标签: c# .net

我的代码需要一个非常精确的时间戳。我使用这篇文章的第一个解决方案:

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#的新手,我可能完全误解了我的问题。

4 个答案:

答案 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结束时是什么时候。

例如,如果您观察到以下一组事件:

  • 阅读秒表:12000毫秒
  • 阅读时钟:上午11:14
  • 阅读时钟:上午11:15
  • 阅读秒表:12002毫秒

然后你知道那里的某个地方,时间恰好是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`如果值为零则省略毫秒。)