3

我想要一种简单的方法来将任何 TimeSpan 显示为经过的时间,而不使用循环或自定义逻辑,
例如

hours : minutes : seconds

我确定必须有一个适用的 .NET 内置或格式字符串,但是我无法找到它。

4

5 回答 5

3

有什么问题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);

不漂亮但有效。

于 2010-05-28T22:46:34.337 回答
3

问题本身不是重复的,但我认为答案是您正在寻找的 - Custom format Timespan with String.Format。为了进一步简化您的解决方案,您可以将该功能包装在 Timespan 的扩展方法中。

于 2010-05-28T22:48:24.800 回答
1

您可以使用:

TimeSpan t = TimeSpan.FromSeconds(999);
string s = t.ToString("c");  // s = "00:16:39"

有关自定义格式,请参阅此MSDN 页面

于 2010-05-28T22:53:19.250 回答
0

这是我用于自定义格式的一种方法:

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 兼容并且不涉及循环。

于 2010-05-28T23:09:08.793 回答
0

用这个: .ToString()

根据MSDN,此显示的默认格式[-][d.]hh:mm:ss[.fffffff]为. 这是将 TimeSpan 值显示为经过时间的最快和最简单的方法,例如 1:45:33

如果您有daysfractions 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"
于 2015-10-30T17:59:33.420 回答