很好地显示时间跨度

请原谅粗略的代码,我试图以秒为单位显示video的持续时间。 我有一个下面但它没有正常工作。

我希望它能很好地显示 – 即应该显示9m:59s而不是09m:59s。

如果小时为零则不显示小时数,如果小时数为零则不显示分钟数。

public static string GetTimeSpan(int secs) { TimeSpan t = TimeSpan.FromSeconds(secs); string answer; if (secs < 60) { answer = string.Format("{0:D2}s", t.Seconds); } else if (secs < 600)//tenmins { answer = string.Format("{0:m}m:{1:D2}s", t.Minutes, t.Seconds); } else if (secs < 3600)//hour { answer = string.Format("{0:mm}m:{1:D2}s", t.Minutes, t.Seconds); } else { answer = string.Format("{0:h}h:{1:D2}m:{2:D2}s", t.Hours, t.Minutes, t.Seconds); } return answer; } 

就像是:

 public static string PrintTimeSpan(int secs) { TimeSpan t = TimeSpan.FromSeconds(secs); string answer; if (t.TotalMinutes < 1.0) { answer = String.Format("{0}s", t.Seconds); } else if (t.TotalHours < 1.0) { answer = String.Format("{0}m:{1:D2}s", t.Minutes, t.Seconds); } else // more than 1 hour { answer = String.Format("{0}h:{1:D2}m:{2:D2}s", (int)t.TotalHours, t.Minutes, t.Seconds); } return answer; } 

我认为您可以通过删除格式的“D2”方面来简化此操作,然后您将不需要特殊情况下的十分钟选项。 基本上只是使用

 string.Format("{0}m:{1}s", t.Minutes, t.Seconds); 

会根据需要给你一两个数字。 所以你的最后一个案例是:

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

根据msdn试试这个:

 if (secs < 60) { answer = t.Format("s"); } else if (secs < 600)//tenmins { answer = t.Format("m:s"); } // ... 
 readonly static Char[] _colon_zero = { ':', '0' }; // ... var ts = new TimeSpan(DateTime.Now.Ticks); String s = ts.ToString("h\\:mm\\:ss\\.ffff").TrimStart(_colon_zero); 
  0.0321
 6.0159
 19.4833
 8:22.0010
 1:04:2394
 19:54:03.4883