以下代码
Console.WriteLine("{0:%h} hours {0:%m} minutes",
new TimeSpan(TimeSpan.TicksPerDay));
生成此输出:
0小时0分钟
我想要的是这个输出:
24小时0分钟
我在这个格式字符串中缺少什么?
P.S。我知道我可以手动将TimeSpan分成几天和几小时,并将两者相乘但宁愿使用自定义格式字符串,因为这些时间跨度显示在silverlight数据网格中,人们期待看到horus,而不是几天。 / p>
答案 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 分钟