我想要一种简单的方法来将任何 TimeSpan 显示为经过的时间,而不使用循环或自定义逻辑,
例如
hours : minutes : seconds
我确定必须有一个适用的 .NET 内置或格式字符串,但是我无法找到它。
有什么问题TimeSpan.ToString()
?
编辑:您可以使用 DateTime 作为中间格式存储:
TimeSpan a = new TimeSpan(1, 45, 33);
string s = string.Format("{0:H:mm:ss}", new DateTime(a.Ticks));
Console.WriteLine(s);
不漂亮但有效。
问题本身不是重复的,但我认为答案是您正在寻找的 - Custom format Timespan with String.Format。为了进一步简化您的解决方案,您可以将该功能包装在 Timespan 的扩展方法中。
您可以使用:
TimeSpan t = TimeSpan.FromSeconds(999);
string s = t.ToString("c"); // s = "00:16:39"
有关自定义格式,请参阅此MSDN 页面。
这是我用于自定义格式的一种方法:
TimeSpan Elapsed = TimeSpan.FromSeconds(5025);
string Formatted = String.Format("{0:0}:{1:00}:{2:00}",
Math.Floor(Elapsed.TotalHours), Elapsed.Minutes, Elapsed.Seconds);
// result: "1:23:45"
我不知道这是否符合“没有自定义逻辑”的条件,但它与 .NET 3.5 兼容并且不涉及循环。
用这个: .ToString()
根据MSDN,此显示的默认格式[-][d.]hh:mm:ss[.fffffff]
为. 这是将 TimeSpan 值显示为经过时间的最快和最简单的方法,例如 1:45:33
如果您有days、fractions of a second或负值,请使用MSDN中所述的自定义格式字符串。这看起来像.ToString(@"hh\:mm\:ss")
例子:
TimeSpan elapsed = new TimeSpan(0, 1, 45, 33);
Console.WriteLine(elapsed.ToString()); //outputs: "1:45:33"
Console.WriteLine(elapsed.ToString(@"hh\:mm\:ss"));//outputs: "1:45:33"