Время показа
Извините за грубый код, я пытаюсь отобразить продолжительность видео, учитывая время в секундах.
У меня был снимок ниже, но он не работал должным образом.
Я хочу, чтобы он просто хорошо отображался - я должен отображать 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;
}
Ответы
Ответ 1
Что-то вроде:
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;
}
Ответ 2
Я думаю, вы можете упростить это, удалив "формат 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);
Ответ 3
В соответствии с msdn попробуйте следующее:
if (secs < 60)
{
answer = t.Format("s");
}
else if (secs < 600)//tenmins
{
answer = t.Format("m:s");
}
// ...
Ответ 4
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