Answers:
尝试:
myTimeSpan.ToString("h'h 'm'm 's's'")
(请注意,即使空格也需要加引号-这就是我的第一次尝试。)
我当然假设您使用的是.NET 4,在此之前,它TimeSpan不支持自定义格式字符串。
编辑:如前所述,这将不会超过24小时。另请注意,也可以通过Noda Time获得替代方法:)
使用Jon Skeet的答案以及以下代码时,请注意这一点:
// 12 days, 23 hours, 24 minutes, 2 seconds.
TimeSpan span = new TimeSpan(12, 23, 24, 2);
// 27 hours, 24 minutes, 2 seconds
TimeSpan span2 = new TimeSpan(27,24,2);
string format = span.ToString("h'h 'm'm 's's'");
string format2 = span2.ToString("h'h 'm'm 's's'");
Console.WriteLine(format);
Console.WriteLine(format2);
Console.ReadLine();
您会得到如下结果:
23h 24m 2s
3h 24m 2s
小时格式最多可以显示23小时。它不会显示27小时或将12天转换为小时,只会将它们切断,就好像它们不存在一样。
解决此问题的一种方法是创建一个扩展程序,该扩展程序检查TimeSpan的长度并根据时间跨度是否超过一年,一天等来创建格式。或者您也可以只显示日期,因为它们永远不会中断:
string newFormat = span.ToString("d'd 'h'h 'm'm 's's'");
请注意,我是编程的初学者。这只是来自观察,因为我很幸运在假设它可以显示所有小时数之后注意到了这一点。我之所以这样说,是因为我不知道是否有更好的解决方案,例如另一种可以显示无穷小时数的小时格式。
但是我确实认为这种格式正在实现其预期的功能。您只需要意识到这一点。因此,这个职位。乔恩·斯凯特(Jon Skeet)的回答从未表明这种格式仅显示日期类型格式的hour属性,其中小时最多为23。
TotalHours在TimeSpan中有其他内容的原因。您可能想要这个Math.Floor(span.TotalHours) + span.ToString("'h 'm'm 's's'")
如果您很不幸没有使用.NET4,请执行以下操作:
string.Format("{0}h{1}m{2}s",
myTimeSpan.Hours,
myTimeSpan.Minutes,
myTimeSpan.Seconds);
TotalHours即使在较新版本的.net中,此解决方案仍然是可行的方法。
TotalHours,因为这是一个double,而不是int像Hours就是,也就是说,它会显示的时间分数以及整个小时。
使用Xamarin,.NET Portable 4.5这是在这里尝试所有其他答案后我得到的唯一格式:
timespan.ToString("hh':'mm':'ss");
本质上,我将:单引号引起来。