以下代码
Console.WriteLine("{0:%h} hours {0:%m} minutes",
new TimeSpan(TimeSpan.TicksPerDay));
产生这个输出:
0 小时 0 分钟
我想要的是这个输出:
24 小时 0 分钟
我在这个格式字符串中缺少什么?
PS 我知道我可以手动将 TimeSpan 分解为几天和几小时,然后将两者相乘,但宁愿使用自定义格式字符串,因为这些时间跨度显示在 Silverlight 数据网格中,人们希望看到 horus,而不是几天。
根据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
,因此你必须从头开始构建它。
感谢您的更新 --- 这就是将我推向自定义类型的边缘。
您可能需要截断它,否则 totalhours 属性将不会显示正确的数字。Dim x As New TimeSpan(0, 0, 3600) String.Format("{0}hr:{1}min", CInt(Math.Truncate(x.TotalHours)), x.Minutes)