Reputation: 28545
Excuse the rough code, I'm trying to display the duration of videos given the time in seconds. I've had a go below but it's not working properly.
I want it to just display nicely - i.e should display 9m:59s not 09m:59s.
If hours are zero dont display hours, if minutes are zero dont display minutes.
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;
}
Upvotes: 16
Views: 12022
Reputation: 18749
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
Upvotes: 3
Reputation: 5251
I think you can simplify this by removing the "D2" aspect of the format and then you won't need a special case for the under ten minutes option. Basically just using
string.Format("{0}m:{1}s", t.Minutes, t.Seconds);
will get you one or two digits as required. So your final case is:
string.Format("{0}h:{1}m:{2}s", t.Hours, t.Minutes, t.Seconds);
Upvotes: 3
Reputation: 3315
According to msdn try this:
if (secs < 60)
{
answer = t.Format("s");
}
else if (secs < 600)//tenmins
{
answer = t.Format("m:s");
}
// ...
Upvotes: 2
Reputation: 39255
Something like:
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;
}
Upvotes: 28