Как отформатировать TimeSpan до строки до .NET 4.0

Я компилирую в С# с использованием .NET 3.5 и пытаюсь преобразовать TimeSpan в строку и форматировать строку. Я хотел бы использовать

myString = myTimeSpan.ToString("c");

однако метод TimeSpan.ToString не принимает строку формата в качестве аргумента до .NET 4.0, и я использую .NET 3.5.

Как бы вы отформатировали TimeSpan как строку? Моя конечная цель - отобразить TimeSpan в формате hh:mm:ss, но в настоящее время я получаю hh:mm:ss:fffffff.

Я пробовал использовать

myString = string.Format("{0:hh:mm:ss}", myTimeSpan);

но string.Format только форматирует мой DateTime, и передача разных строк формата не работает при попытке форматирования TimeSpan.

Ответы

Ответ 1

Один из способов:

TimeSpan ts = DateTime.Now - DateTime.Now.AddHours(-10);
Console.WriteLine(string.Format("{0:00}:{1:00}:{2:00}", ts.TotalHours, ts.Minutes, ts.Seconds));

Результат будет выглядеть примерно так:

09:59:59

ИЗМЕНИТЬ:

Или вы можете попробовать:

TimeSpan ts = DateTime.Now - DateTime.Now.AddHours(-10);
DateTime mydate = new DateTime(ts.Ticks);
Console.WriteLine(mydate.ToString(("hh:mm:ss")));

Вывод:

09:59:59

Ответ 2

Лучше 24 * ts.Days + ts.Hours, чем ts.TotalHours. Для сравнения:

var ts = TimeSpan.FromHours( 23.9 );
Console.WriteLine( ts );
Console.WriteLine( "{0:00}:{1:00}:{2:00}", ts.TotalHours, ts.Minutes, ts.Seconds );
Console.WriteLine( "{0}:{1:00}:{2:00}", ts.TotalHours, ts.Minutes, ts.Seconds );
Console.WriteLine( "{0}:{1:00}:{2:00}", 24*ts.Days+ts.Hours, ts.Minutes, ts.Seconds );