TimeSpan FormatString с дополнительными часами
У меня есть время, ts
, что имеет в основном минуты и секунды, но иногда часы. мне бы хотелось ts
вернуть отформатированную строку, которая даст следующие результаты:
3:30 (hours not displayed, showing only full minutes)
13:30
1:13:30 (shows only full hours instead of 01:13:30)
Пока что у меня есть:
string TimeSpanText = string.Format("{0:h\\:mm\\:ss}", MyTimeSpan);
но это не дает вышеуказанные результаты. Как я могу достичь желаемых результатов?
2 ответа
Решение
Я не думаю, что одна строка формата даст вам то, что вы хотите, но создать вывод самостоятельно - простая задача:
public string FormatTimeSpan(TimeSpan ts)
{
var sb = new StringBuilder();
if ((int) ts.TotalHours > 0)
{
sb.Append((int) ts.TotalHours);
sb.Append(":");
}
sb.Append(ts.Minutes.ToString("m"));
sb.Append(":");
sb.Append(ts.Seconds.ToString("ss"));
return sb.ToString();
}
РЕДАКТИРОВАТЬ: лучшая идея!
Вы можете сделать метод выше метод расширения на TimeSpan
класс вроде так:
public static class Extensions
{
public static string ToMyFormat(this TimeSpan ts)
{
// Code as above.
}
}
Тогда использовать это так же просто, как вызывать ts.ToMyFormat()
,
Может быть, вы хотите что-то вроде
string TimeSpanText = string.Format(
MyTimeSpan.TotalHours >= 1 ? @"{0:h\:mm\:ss}" : @"{0:mm\:ss}",
MyTimeSpan);