11

TimeSpan を文字列にフォーマットしようとしています。次に、MSDN から有効期限を取得して、カスタマイズした文字列形式を生成します。でも言葉にならない。「FormatException」を返します。

なんで?理解できない...

var ts = new TimeSpan(0, 3, 25, 0);
var myString = ts.ToString("[d'.']hh':'mm");
4

2 に答える 2

13

c標準フォーマットのオプションの日と小数秒部分のようなことをしようとしていると思います。私が知る限り、これはカスタム フォーマット文字列では直接可能ではありません。 オプションの時間を持つ TimeSpan FormatStringは、あなたが持っているのと同じ種類の質問です。私は彼らの解決策に似たものを提案します.拡張メソッドにフォーマット文字列を作成させます.

public static string ToMyFormat(this TimeSpan ts)
{
    string format = ts.Days >= 1 ? "d'.'hh':'mm" : "hh':'mm";
    return ts.ToString(format);
}

それを使用するには:

var myString = ts.ToMyFormat();
于 2012-09-22T11:49:34.653 に答える
3

通常、このエラーは、書式文字列で定義された意味を持つ記号を使用した場合に発生します。これらをデバッグする最善の方法は、機能するまで文字を選択的に削除することです。削除した最後の文字が問題の文字でした。

この場合、カスタム TimeSpan フォーマット文字列を見ると、角かっこが問題です。たとえば、次のように「\」でエスケープします。

var ts = new TimeSpan(0, 3, 25, 0);
var myString = ts.ToString("\\[d'.'\\]hh':'mm");

[編集:追加]

顧客のカスタム TimeSpan フォーマット文字列ページで、値が 0 の場合にテキストを省略する方法について言及されていません。この場合、ifステートメントまたは?:演算子を検討してください。

于 2012-09-22T11:38:43.330 に答える