如何设置时间跨度为小时而不是天
本文关键字:小时 时间跨度 何设置 设置 | 更新日期: 2023-09-27 17:50:41
以下代码
Console.WriteLine("{0:%h} hours {0:%m} minutes",
new TimeSpan(TimeSpan.TicksPerDay));
产生如下输出:
0 hours 0 minutes
我想要的是这样的输出:
24小时0分钟
我在这个格式字符串中缺少什么?
注:我知道我可以手动将时间跨度分解为天数和小时,并将两者相乘,但我宁愿使用自定义格式字符串,因为这些时间跨度在silverlight数据网格中显示,人们希望看到的是小时,而不是天。
根据MSDN,使用%h
将显示
时间间隔中不计入天数的完整小时数。
我认为您将需要使用TimeSpan
类的TotalHours
属性,如:
TimeSpan day= new TimeSpan(TimeSpan.TicksPerDay);
Console.WriteLine("{0} hours {1} minutes", (int)day.TotalHours, day.Minutes);
如果您绝对需要能够通过将自定义格式化器传递给ToString
方法来实现所述格式,那么您可能需要创建自己的CustomTimeSpan
类。不幸的是,您不能从struct
继承,因此您必须从头开始构建它。
似乎没有一个格式选项可以从TimeSpan
中获得总小时数。最好的选择是使用TotalHours
属性:
var mySpan = new TimeSpan(TimeSpan.TicksPerDay);
Console.WriteLine("{0} hours {1} minutes", (int)mySpan.TotalHours, mySpan.Minutes);
TotalHours
返回一个双精度值,因为它包含小数小时数,所以您需要将其截断为整数部分。
另一种可能是:
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分钟