Warm tip: This article is reproduced from serverfault.com, please click

c#-如何将 TimeSpan 格式化为数小时而不是数天

(c# - How to format a TimeSpan for hours not days)

发布于 2011-04-18 14:00:29

以下代码

Console.WriteLine("{0:%h} hours {0:%m} minutes", 
                   new TimeSpan(TimeSpan.TicksPerDay));

产生这个输出:

0 小时 0 分钟

我想要的是这个输出:

24 小时 0 分钟

我在这个格式字符串中缺少什么?

PS 我知道我可以手动将 TimeSpan 分解为几天和几小时,然后将两者相乘,但宁愿使用自定义格式字符串,因为这些时间跨度显示在 Silverlight 数据网格中,人们希望看到 horus,而不是几天。

Questioner
Ralph Shillington
Viewed
0
Chris Shouts 2011-04-18 22:17:25

根据MSDN,使用%h会告诉你

时间间隔中不计入天数的整小时

我认为你将需要使用该类TotalHours属性,TimeSpan例如:

TimeSpan day= new TimeSpan(TimeSpan.TicksPerDay);
Console.WriteLine("{0} hours {1} minutes", (int)day.TotalHours, day.Minutes);

更新

如果你绝对需要通过将自定义格式化程序传递给ToString方法来实现规定的格式,你可能需要创建自己的CustomTimeSpan类。不幸的是,你不能从 a 继承struct,因此你必须从头开始构建它。