DateTime型は ToString() メソッドで文字列に変換する際に、"yyyy/MM/dd HH:mm:ss" などのフォーマット(カスタム DateTime 書式指定文字列)を指定して文字列に変換できることは広く知られています。
これに関しての詳細は MSDN の カスタムの日付と時刻の書式指定文字列を参照下さい。
しかし、同じ感覚で TimeSpan型を ToString() メソッドで文字列に変換と「FormatException 入力文字列の形式が正しくありません。」という例外が発生してしまいます。
Dim dt As New DateTime(2000, 1, 1) ' 書式を指定して出力 Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss")) ' 結果:2000/01/01 00:00:00 Dim ts As New TimeSpan(23, 59, 59) ' 書式を指定して出力(まちがった例) ' Console.WriteLine(ts.ToString("HH:mm:ss")); ' 例外:FormatException 入力文字列の形式が正しくありません。
の解説が分かりにくく、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