TimeSpan FormatString,可选小时

我有一个时间跨度, ts ,大多数分钟和秒,但有时几个小时。 我想ts返回一个格式化的字符串,它会给出以下结果:

 3:30 (hours not displayed, showing only full minutes) 13:30 1:13:30 (shows only full hours instead of 01:13:30) 

到目前为止我有:

 string TimeSpanText = string.Format("{0:h\\:mm\\:ss}", MyTimeSpan); 

但它没有给出上述结果。 我怎样才能达到我想要的效果?

我不认为单个格式字符串会给你你想要的东西,但自己构建输出是一个简单的任务:

 public string FormatTimeSpan(TimeSpan ts) { var sb = new StringBuilder(); if ((int) ts.TotalHours > 0) { sb.Append((int) ts.TotalHours); sb.Append(":"); } sb.Append(ts.Minutes.ToString("m")); sb.Append(":"); sb.Append(ts.Seconds.ToString("ss")); return sb.ToString(); } 

编辑:更好的主意!

您可以将上面的方法设置为TimeSpan类上的扩展方法,如下所示:

 public static class Extensions { public static string ToMyFormat(this TimeSpan ts) { // Code as above. } } 

然后使用它就像调用ts.ToMyFormat()一样简单。

也许你想要的东西

 string TimeSpanText = string.Format( MyTimeSpan.TotalHours >= 1 ? @"{0:h\:mm\:ss}" : @"{0:mm\:ss}", MyTimeSpan);