以毫秒级精度返回time.now

问题描述:

我目前正在编程一个模拟器,其传感器以非常高的速度返回一个值。由于正在进行的日志记录丰富,对我来说,让阵容正确无误是非常重要的。为了做到这一点,我试图让计时器排队。然而这是一个问题。当返回毫秒时,它经常返回0.01.1或甚至毫秒。这是轻微抛出阵容。任何想法如何强制它返回例如.000?以毫秒级精度返回time.now

Basicly我试图做这样的:

[DEBUG]|18:48:39.449| Sonar 10d | Sonar1 40d | 7.684386 
[DEBUG]|18:48:39.45| Sonar 10d | Sonar1 10d | 27.54916 
[DEBUG]|18:48:39.5| Sonar 10d | Sonar1 20d | 14.52461 
[DEBUG]|18:48:39| Sonar 10d | Sonar1 30d | 9.878839 

看起来更像是这样的:

[DEBUG]|18:48:39.449| Sonar 10d | Sonar1 40d | 7.684386 
[DEBUG]|18:48:39.450| Sonar 10d | Sonar1 10d | 27.54916 
[DEBUG]|18:48:39.500| Sonar 10d | Sonar1 20d | 14.52461 
[DEBUG]|18:48:39.000| Sonar 10d | Sonar1 30d | 9.878839 

不使用太多的代码,就像我此刻做的事情。

当前代码:

DateTime time = DateTime.Now;  
time.ToString("HH:mm:ss.FFF"); 

然后太多的代码添加。和0 ...

+2

一行被认为是“代码太多”?你到底在问什么? – Amy

+0

你知道'18:48:39.45'和18:48:39.450是一样的,对吗? – Plutonix

+2

如果它与您可能对String.PadRight感兴趣的其他字段相关(https://msdn.microsoft.com/zh-cn/library/system.string.padright(v=vs.110).aspx)。这将填充字符串给定的长度。如果你最终得到Sonar10或类似的东西,这很有用。 – Chris

使用fff,而不是FFF

time.ToString("HH:mm:ss.fff"); 

var now = new DateTime(2017,10,18,12,16,16, 10); 
Console.WriteLine("What you want {0:HH:mm:ss.fff}", now); 
Console.WriteLine("WHat you have {0:HH:mm:ss.FFF}", now); 

生成输出

What you want 12:16:16.010 
WHat you have 12:16:16.01 

更多格式字符串选项看到Custom Date and Time Format Strings

+0

完美。那正是我正在寻找的 –

您可以尝试像下面一行(注意是小写f

time.ToString("HH:mm:ss.fff"); 

你可以用下面的代码

var s = DateTime.ParseExact("20170810 18:20:13", "yyyyMMdd HH:mm:ss", null).ToString("HH:mm:ss.fff"); 

这应该打印下列输出

18:20:13.000 
测试