TimeSpan ToString格式

只是好奇,有一个格式string我可以用来输出像“5小时3分30秒”?

例如。 (显然是错的)

myTimeSpan.ToString("hh mm ss") 

尝试:

 myTimeSpan.ToString("h'h 'm'm 's's'") 

(请注意,即使是空格也需要引用 – 这是我第一次尝试的错误。)

我假设你使用.NET 4,当然 – 在此之前, TimeSpan不支持自定义格式string。

编辑:如上所述,这将不会超过24小时工作。 另外请注意,替代品也可以通过野田时间 🙂

在使用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天转换为几个小时,只会将它们切断,就好像它们不存在一样。

解决这个问题的一个方法是创build一个扩展,检查TimeSpan的长度,并根据时间跨度是否超过一年,一天等来创build格式。 或者你可以简单地总是显示几天,因为他们从未切断:

 string newFormat = span.ToString("d'd 'h'h 'm'm 's's'"); 

请注意我是编程初学者。 这只是来自观察后,我很幸运,以为它会显示所有的小时后,注意到这一点。 我是这样说的,因为我不知道是否有更好的解决scheme,就像另一个可以显示无数个小时的小时格式。

不过我认为这种格式正在实现其预期的function。 你只需要意识到这一点。 因此这篇文章。 乔恩Skeet的答案从来没有表明,这种格式是只显示datetypes格式的小时属性,其中小时可以是至多23。

如果你不幸的是不能使用.NET4:

 string.Format("{0}h{1}m{2}s", myTimeSpan.Hours, myTimeSpan.Minutes, myTimeSpan.Seconds); 

concactenation怎么样:

 String oTime = myTimeSpan.ToString("h") + "h " + myTimeSpan.ToString("m") + "m " + myTimeSpan.ToString("s") + "s " 

更新1:

你可以用单引号来逃避它: h'h 'm'm 's's'

这个小代码有助于parsing和反转:

  var t = TimeSpan.FromMilliseconds(450780); double d1 = t.TotalSeconds; string t3 = t.ToString(@"hh\:mm\:ss\.f",null); var tt = TimeSpan.ParseExact(t3, @"hh\:mm\:ss\.f",null); double d2 = tt.TotalSeconds; 

辩解时间parsing

使用Xamarin.NET Portable 4.5这是我尝试所有其他答案后,唯一的格式:

 timespan.ToString("hh':'mm':'ss"); 

基本上我把:在单引号来逃避他们。