[英]C# + Format 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元素?
注意:此答案仅适用于.NET 4.0。
冒号是一个文字,需要用单引号引起来:
duration.ToString("mm':'ss")
从MSDN文档中 :
自定义
TimeSpan
格式说明符不包含占位符分隔符,例如将天与小时,小时与分钟或秒与小数秒分隔的符号。 而是,这些符号必须作为字符串文字包含在自定义格式字符串中。
尝试这个:
Console.WriteLine("{0:D2}:{1:D2}", duration.Minutes, duration.Seconds);
由于某些神秘的原因,TimeSpan直到.NET 4.0都没有支持格式的ToString()重载。 对于早期版本,只要它是正数,就可以劫持DateTime.ToString():
TimeSpan ts = new TimeSpan(0, 2, 8);
string s = new DateTime(ts.Ticks).ToString("mm:ss");
.Net 4中添加了System.TimeSpan的自定义格式,因此您现在可以执行以下操作:
string.Format("{0:mm\\:ss}", myTimeSpan);
(UPDATE) ,这是使用C#6字符串插值的示例:
$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15
简而言之,您现在需要使用“ \\”对“:”字符进行转义(除非您使用逐字字符串,否则必须对自身进行转义)。
此摘录来自“ MSDN 自定义TimeSpan格式字符串”页面,它说明了如何转义“:”和“。”。 格式字符串中的字符:
自定义TimeSpan格式说明符不包含占位符分隔符,例如将天与小时,小时与分钟或秒与小数秒分隔的符号。 而是,这些符号必须作为字符串文字包含在自定义格式字符串中。 例如,“ dd.hh:mm”将句点(。)定义为天和小时之间的分隔符,将冒号(:)定义为时和分钟之间的分隔符。
日期和时间格式字符串仅适用于DateTime和DateTimeOffset。 可以使用普通格式的字符串,但是:
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"));
您可以随时这样做:
string.Format("{0}:{1}", duration.Minutes, duration.Seconds);
基于这个描述了TimeSpan的ToString方法的MSDN页面,我什至可以编译上面的代码有些惊讶。 TimeSpan没有只接受一个字符串的ToString()重载。
本文还显示了您可以转换并用于格式化TimeSpan的函数。
您可以使用以下代码。
TimeSpan tSpan = TimeSpan.FromSeconds(allTotalInMinutes);
string tTime = string.Format("{1:D2}:{2:D2}", tSpan.Minutes, tSpan.Seconds);
它将显示为34:45格式。
希望对您有帮助。
TimeSpan t = TimeSpan.Parse("13:45:43");
Console.WriteLine(@"Timespan is {0}", String.Format(@"{0:yy\:MM\:dd\:hh\:mm\:ss}", t));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.