C#+格式TimeSpan

时间:2010-03-16 17:04:41

标签: c#

我正在尝试以“[分钟]:[秒]”的格式格式化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元素?

10 个答案:

答案 0 :(得分:66)

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

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

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

来自MSDN documentation

  

自定义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格式。

希望它会对你有所帮助。