C#+格式TimeSpan

我正在尝试以“[分钟]:[秒]”的格式格式化TimeSpan元素。 在这种格式下,2分8秒看起来像“02:08”。 我已经尝试了与String.Format和ToString方法的各种选项,但我得到一个FormatException。 这是我目前正在尝试:

DateTime startTime = DateTime.Now; // Do Stuff TimeSpan duration = DateTime.Now.Subtract(startTime); Console.WriteLine("[paragraph of information] Total Duration: " + duration.ToString("mm:ss")); 

我究竟做错了什么? 如何使用我所需的格式格式化TimeSpan元素?

谢谢

尝试这个:

 Console.WriteLine("{0:D2}:{1:D2}", duration.Minutes, duration.Seconds); 

注意:此答案仅适用于.NET 4.0。

冒号字符是文字​​,需要用单引号括起来:

 duration.ToString("mm':'ss") 

从MSDN文档 :

自定义TimeSpan格式说明符不包含占位符分隔符,例如将小时,小时,分钟或小数秒分开的符号。 相反,这些符号必须作为string文字包含在自定义格式string中。

由于一些神秘的原因,TimeSpan从来没有得到ToString()重载,直到.NET 4.0才支持格式化。 对于以前的版本,只要是正面的,你可以劫持DateTime.ToString():

  TimeSpan ts = new TimeSpan(0, 2, 8); string s = new DateTime(ts.Ticks).ToString("mm:ss"); 

System.TimeSpan的自定义格式被添加到.Net 4,所以你现在可以做到以下几点:

 string.Format("{0:mm\\:ss}", myTimeSpan); 

(更新) ,这里是一个使用C#6string插值的例子:

 $"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15 

总之,你现在需要用“\”来转义“:”字符(除非你使用逐字string,否则它本身必须被转义)。

MSDN Custom TimeSpan格式string页面的摘录说明了如何转义“:”和“。”。 格式string中的string:

自定义TimeSpan格式说明符不包含占位符分隔符,例如将小时与小时,小时与分钟或小数秒分开的符号。 相反,这些符号必须作为string文字包含在自定义格式string中。 例如,“dd.hh:mm”将date(。)定义为date和小时之间的分隔符,将冒号(:)作为小时和分钟之间的分隔符。

date和时间格式string只适用于DateTime和DateTimeOffset。 哟可以使用正常的格式string,但:

 string.Format("{0}:{1:00}", Math.Truncate(duration.TotalMinutes), duration.Seconds) 

请注意,在这里使用TotalMinutes可以确保在花费60分钟以上时结果仍然正确。

尝试这个:

 DateTime startTime = DateTime.Now; // Do Stuff TimeSpan duration = DateTime.Now.Subtract(startTime); Console.WriteLine("[paragraph of information] Total Duration: " + duration.Minutes.ToString("00") + ":" + duration.Seconds.ToString("00")); 

基于这个描述TimeSpan的ToString方法的MSDN页面,我感到有点惊讶,你甚至可以编译上面的代码。 TimeSpan没有只接受一个string的ToString()重载。

文章还显示了一个可以用于格式化TimeSpan的函数。

你总是可以这样做:

 string.Format("{0}:{1}", duration.Minutes, duration.Seconds); 
 TimeSpan t = TimeSpan.Parse("13:45:43"); Console.WriteLine(@"Timespan is {0}", String.Format(@"{0:yy\:MM\:dd\:hh\:mm\:ss}", t)); 

你可以使用下面的代码。

 TimeSpan tSpan = TimeSpan.FromSeconds(allTotalInMinutes); string tTime = string.Format("{1:D2}:{2:D2}", tSpan.Minutes, tSpan.Seconds); 

它将显示即34:45格式。

希望它会帮助你。