2012-02-15 48 views
11

原谅粗略的代码,我试图显示给定的时间以秒为单位的视频的持续时间。 我已经去过了,但它不能正常工作。显示时间跨度很好

我希望它能够很好地显示 - 即应显示9m:59s而不是9m: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; 
} 
+0

所以你有什么问题吗?或者你期望会发生什么,发生了什么?请不要期望我猜测:) – Alex 2012-02-15 10:58:39

+0

问题是显示持续时间很好给了秒。如果小时为零不显示小时,如果分钟为零不显示分钟,也将需要以格式9m:59s不是09m:59s为单个数字分钟。 – raklos 2012-02-15 11:02:05

+0

您的格式字符串错误,没有“m”或“h”说明符。请参阅[MSDN](http://msdn.microsoft.com/zh-cn/library/dwhawy9k.aspx)。你只是在处理“数字”而不是“分钟/秒”!另外,您不需要为> 10的值显式指定“2个位置”。 – 2012-02-15 11:03:35

回答

24

喜欢的东西:

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; 
} 
+0

为什么在使用't.Hours'时使用't.TotalHours'? – 2016-09-23 04:23:11

+4

@FandiSusanto如果时间跨度为“1天2小时”,TotalHours将返回26,小时将返回2。 – 2016-09-23 07:14:48

2

根据msdn试试这个:

if (secs < 60) 
{ 
    answer = t.Format("s"); 
} 
else if (secs < 600)//tenmins 
{ 
    answer = t.Format("m:s"); 
} 
// ... 
3

我想你可以通过删除格式的 “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); 
1
readonly static Char[] _colon_zero = { ':', '0' }; 
// ... 

var ts = new TimeSpan(DateTime.Now.Ticks); 
String s = ts.ToString("h\\:mm\\:ss\\.ffff").TrimStart(_colon_zero); 
.0321 
6.0159 
19.4833 
8:22.0010 
1:04:2394 
19:54:03.4883