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格式。
希望它会帮助你。