如何格式化TimeSpan几小时而不是几天

Ral*_*ton 9 c# silverlight formatting timespan

以下代码

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

产生这个输出:

0小时0分钟

我想要的是这个输出:

24小时0分钟

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

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

Chr*_*uts 13

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

时间间隔内的整个小时数不计入天数的一部分.

我想你需要使用类的TotalHours属性,TimeSpan如:

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

更新

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


Chr*_*isF 10

似乎没有一种格式选项可以获得总时数TimeSpan.您最好的选择是使用该TotalHours物业:

var mySpan = new TimeSpan(TimeSpan.TicksPerDay);
Console.WriteLine("{0} hours {1} minutes", (int)mySpan.TotalHours, mySpan.Minutes);
Run Code Online (Sandbox Code Playgroud)

TotalHours 返回一个double,因为它包含小数小时,因此您需要将其截断为整数部分.