DateTime型は ToString() メソッドで文字列に変換する際に、"yyyy/MM/dd HH:mm:ss" などのフォーマット(カスタム DateTime 書式指定文字列)を指定して文字列に変換できることは広く知られています。
これに関しての詳細は MSDN の カスタムの日付と時刻の書式指定文字列を参照下さい。
しかし、同じ感覚で TimeSpan型を ToString() メソッドで文字列に変換と「FormatException 入力文字列の形式が正しくありません。」という例外が発生してしまいます。
DateTime dt = new DateTime(2000, 1, 1); // 書式を指定して出力 Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss")); // 結果:2000/01/01 00:00:00 TimeSpan ts = new TimeSpan(23, 59, 59); // 書式を指定して出力(まちがった例) Console.WriteLine(ts.ToString("HH:mm:ss")); // 例外:FormatException 入力文字列の形式が正しくありません。
MSDN の解説が分かりにくく、TimeSpan型を ToString() メソッドで文字列に変換する際にフォーマット(カスタム書式指定文字列)を指定できないと誤解している方も多いのですが、実際は Format の形式が異なるだけで、書式の指定は可能です。ただし、.NET Framework 4 以降に限ります。
TimeSpan.ToString メソッド (String)ポイントは2点で
これを踏まえて書き直すと、下のようになります。
// 書式を指定して出力 Console.WriteLine(ts.ToString(@"hh\:mm\:ss")); // 結果:23:59:59
.NET Framework 4 以前のバージョンの場合は、0を指定して生成したDateTime型 を利用して出力する方法が一般的のようです。
// DateTimeを利用して出力 Console.WriteLine(new DateTime (0).Add(ts).ToString("HH:mm:ss")); // 結果:23:59:59