System.TimeSpan 型の書式指定の方法です。
DateTime 型とは ToString の書式の指定が異なるので同じ感覚で記述すると以下の「System.FormatException」が発生します。
// こんな感じのエラーが出る 'span.ToString(@"dd\d\a\y mm\:ss\.fff")' は型 'System.FormatException' の例外をスローしました Data: {System.Collections.ListDictionaryInternal} HResult: -2146233033 HelpLink: null InnerException: null Message: "Input string was not in a correct format." Source: "System.Private.CoreLib" StackTrace: " 場所 System.Globalization.TimeSpanFormat.FormatCustomized(TimeSpan value, ReadOnlySpan`1 format, DateTimeFormatInfo dtfi, StringBuilder result) 場所 System.Globalization.TimeSpanFormat.Format(TimeSpan value, String format, IFormatProvider formatProvider) 場所 System.TimeSpan.ToString(String format)" TargetSite: {System.Text.StringBuilder FormatCustomized(System.TimeSpan, System.ReadOnlySpan`1[System.Char], System.Globalization.DateTimeFormatInfo, System.Text.StringBuilder)}
正しい記述方法は以下の通りです。
var span = new TimeSpan(1, 2, 3, 4, 5); // 1日 2時間 3分 4秒 5ms // ★(1) string str1 = span.ToString("dd\d\a\y\ mm\:ss\.fff"); // > 01day 03:04.005 // ★(2) // 文字列補完で書式を指定する場合も同じ string str2 = $@"{span:dd\d\a\y\ mm\:ss\.fff}"; // > 01day 03:04.005
書式指定中で書式指定文字以外を使用する場合、文字ごとに「\」を入れる必要があります。
- 「day」と出力したい場合「\d\a\y」
- 空白スペースも「\(空白)]
- コロンやドットも「\:\.」
時間を表すHHだけhhに変える必要がありますが、あとはDateTimeの書式指定と指定方法は同じです。
上記を認識した状態でMSDNのリファレンスを読めば書式指定で例外が減ると思います。