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;
}
"c" is the default TimeSpan format string; the TimeSpan. ToString() method formats a time interval value by using the "c" format string. TimeSpan also supports the "t" and "T" standard format strings, which are identical in behavior to the "c" standard format string.
The following example initializes a TimeSpan value to a specified number of hours, minutes, and seconds. TimeSpan interval = new TimeSpan(2, 14, 18); Console. WriteLine(interval. ToString()); // Displays "02:14:18".
C# TimeSpan struct represents a time interval that is difference between two times measured in number of days, hours, minutes, and seconds. C# TimeSpan is used to compare two C# DateTime objects to find the difference between two dates.
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;
}
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);
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With