繁体   English   中英

C#+格式时间跨度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM