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

时间:2011-04-18 14:00:29

标签: c# silverlight formatting timespan

以下代码

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

生成此输出:

  

0小时0分钟

我想要的是这个输出:

  

24小时0分钟

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

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

3 个答案:

答案 0 :(得分:13)

根据MSDN,使用%h会向您显示

  

不计入天数的时间间隔内的整个小时数。

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

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

<强>更新

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

答案 1 :(得分:10)

似乎没有格式选项可以获得TimeSpan的总小时数。您最好的选择是使用TotalHours属性:

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

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

答案 2 :(得分:0)

另一种可能是:

TimeSpan day = new TimeSpan(2,1,20,0); // 2.01:20:00
Console.WriteLine("{0} hours {1} minutes", (int)day.TotalHours, day.Minutes);

控制台将显示:

<块引用>

49 小时 20 分钟