我正在尝试以“[分钟]:[秒]”的格式格式化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元素?
答案 0 :(得分:66)
注意:此答案仅适用于.NET 4.0。
冒号字符是文字,需要用单引号括起来:
duration.ToString("mm':'ss")
自定义
TimeSpan
格式说明符 不包括占位符分隔符 符号,例如符号 从几小时到几小时不等 分数,或分数秒 秒。相反,这些符号必须 包含在自定义格式中 字符串作为字符串文字。
答案 1 :(得分:50)
试试这个:
Console.WriteLine("{0:D2}:{1:D2}", duration.Minutes, duration.Seconds);
答案 2 :(得分:18)
出于某种神秘的原因,TimeSpan从未获得支持格式化的ToString()重载,直到.NET 4.0。对于早期版本,只要它是肯定的,您就可以劫持DateTime.ToString():
TimeSpan ts = new TimeSpan(0, 2, 8);
string s = new DateTime(ts.Ticks).ToString("mm:ss");
答案 3 :(得分:18)
.Net 4中添加了System.TimeSpan的自定义格式,因此您现在可以执行以下操作:
string.Format("{0:mm\\:ss}", myTimeSpan);
(更新)以下是使用C#6字符串插值的示例:
$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15
简而言之,您现在需要使用“\”转义“:”字符(除非您使用逐字字符串,否则必须对其进行转义)。
MSDN Custom TimeSpan Format Strings页面的摘录解释了有关转义“:”和“。”的问题。格式字符串中的字符:
自定义TimeSpan格式说明符不包括占位符分隔符符号,例如将小时数与小时数,小时数与分数小时数或秒数与小数秒数分隔开的符号。相反,这些符号必须作为字符串文字包含在自定义格式字符串中。例如,“dd.hh:mm”将句点(。)定义为天和小时之间的分隔符,并将冒号(:)定义为小时和分钟之间的分隔符。
答案 4 :(得分:6)
日期和时间格式字符串仅适用于DateTime和DateTimeOffset。不过,Yo可以使用普通的格式字符串:
string.Format("{0}:{1:00}", Math.Truncate(duration.TotalMinutes), duration.Seconds)
请注意,在此处使用TotalMinutes可确保在花费超过60分钟时结果仍然正确。
答案 5 :(得分:2)
试试这个:
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"));
答案 6 :(得分:0)
你总能做到:
string.Format("{0}:{1}", duration.Minutes, duration.Seconds);
答案 7 :(得分:0)
基于这个描述TimeSpan的ToString方法的MSDN页面,我甚至有点惊讶你甚至可以编译上面的代码。 TimeSpan没有只接受一个字符串的ToString()重载。
The article还会显示一个可以用来格式化TimeSpan的函数。
答案 8 :(得分:0)
TimeSpan t = TimeSpan.Parse("13:45:43");
Console.WriteLine(@"Timespan is {0}", String.Format(@"{0:yy\:MM\:dd\:hh\:mm\:ss}", t));
答案 9 :(得分:0)
您可以使用以下代码。
TimeSpan tSpan = TimeSpan.FromSeconds(allTotalInMinutes);
string tTime = string.Format("{1:D2}:{2:D2}", tSpan.Minutes, tSpan.Seconds);
它将显示34:45格式。
希望它会对你有所帮助。