2013-07-06 46 views
1

以下代码没有正确格式化时间。我想要的只有分钟:秒:毫秒_with_3_decimals,但无论选择什么格式,它都会被忽略,时间会以默认格式显示。为什么C#DateTime字符串格式不工作?

Log(LogMsgType.Normal, String.Format("+{0:mm:ss.fff} ", DateTime.Now.Subtract(latest))); 

Code output

+0

[DateTime.Now属性](http://msdn.microsoft.com /en-us/library/system.datetime.now.aspx)。 – ChiefTwoPencils

+0

[自定义日期和时间格式字符串](http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx) –

+1

与格式问题无关,但应该使用'DateTime.UtcNow'而不是' DateTime.Now'。否则,当夏令时开始或停止时,您的计算可能会关闭。更好的是,使用['Stopwatch'](http://msdn.microsoft.com/en-us/library/System.Diagnostics.Stopwatch.aspx)类,特别是如果您实际上对像您这样的细粒度精度有要求显示。 –

回答

8

你需要考虑的TimeSpan,不DateTime格式。这是.NET 4.0(Visual Studio 2010)中的新功能。见:MSDN: Custom TimeSpan Format Strings

我会尝试这样的:

String.Format("+{0:mm':'ss'.'fff} ", DateTime.Now - latest) 

(最好检查一下:第一,这是从来没有超过60分钟,否则你将失去的时间跨度最显著的部分。)

注意:如果您使用的是.NET 3.5或更早的版本,那么这将不起作用,因为TimeSpan在这些版本中不是IFormattable。在这种情况下,我建议:

var span = DateTime.Now - latest; 
    ... 
String.Format("+{0:D2}:{1:D2}.{2:D3} ", span.Minutes, span.Seconds, span.Milliseconds) 
+0

如果它是.NET 4.0中的新增功能,那么考虑到我正在使用.NET 3.5 SP1,这对我并不是很有用。 此外,为什么它不适用于DateTime,我的代码似乎符合DateTime格式的MSDN示例? –

+2

'Subtract'返回'TimeSpan',而不是'DateTime',所以你需要看看如何格式化'TimeSpan',这与格式化'DateTime'不同。 –

+2

DateTime.Subtract(DateTime)返回TimeSpan,DateTime.Subtract(TimeSpan)返回DateTime(为了完整和清晰) – KekuSemau

0

你想:

@"+{0:mm\:ss\.fff} " 

你必须逃离结肠和周期

+0

谢谢,但不幸的是它没有效果,它和以前完全一样。 –

相关问题