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); 
Другие вопросы по тегам