2012-10-24 73 views
15

文字列からtimespanを取得しようとしていますが、TryParseExactがfalse(失敗)を返しています。TimeSpan.TryParseExactが機能しない

私が間違っていることを見ることができません、お手伝いできますか?コード内に2行のバージョンを試しましたが、どちらも動作しません。

TimeSpan.TryParseExact("04:00:01","HH:mm:ss",CultureInfo.CurrentCulture, out aTime) 

TimeSpan.TryParseExact("04:00:01","HH:mm:ss", null, out aTime) 

編集:ここ 両方の応答は、私は私のカスタムのタイムスパン形式の間違った形式を持って、正しい - 私が作った間違いは日時のカスタムフォーマットがうまくいくと仮定することですTimeSpansの場合はそうですが、そうではありません。

答えて

27

問題はTimeSpanのためのフォーマット文字列で、単純である、あなたは"HH:mm:ss"を指定しています。指定子HH(大文字)はタイムスパンには無効です。 hhを使用してください。書式文字列は大文字と小文字を区別します。

コロン文字(:)もエスケープする必要がありますので、"hh\\:mm\\:ss",@"hh\:mm\:ss"または"hh':'mm':'ss"を使用してください。 3つのフォームはすべて同じ効果を持ちます。

TimeSpan hereの有効なカスタム書式文字列の一覧を確認できます。 TimeSpanの標準形式文字列はhereです。

HHは、24時間のクロックと小文字を表すDateTimeとDateTimeOffsetに有効ですが、hhは12時間のクロックを表します.TimeSpanでは、時間コンポーネントは常に24時間に基づいています。 HHのフォーマットは、一貫性のために選択されたフォーマットになると思うでしょうが、それはhhです。

+0

ありがとう、私はそれを認識しませんでしたDateTimeとTimeSpanのカスタム文字列が異なっていました。 – mcmillab

+0

DateTimeとTimestampの形式が異なる場合、MSはSTUPIDです。お返事をありがとうございます。 – Mensur

+0

はい "HH:mm:ss"はfalseを返します。私はOğuzYıldızのようにコロン文字を描いていました。私のフォーマットは "hh \\:mm \\:ss"です。これは2つの答えの組み合わせです。 – user1011138

1

渡す文字列形式が間違っています。

var res=TimeSpan.TryParseExact("04:00:01", "g", CultureInfo.CurrentCulture, out aTime); 

g-一般的な略式形式であり、培養感受性である。この上

詳細はこちらStandard Timespan Format Strings

+0

okですが、私はカスタムフォーマット文字列を提供しましたが、なぜそれは機能しませんか? – mcmillab

+0

私はこれを試して、そのworking.whatはあなたのために働いていません –

+0

私はあなたの提案を試して、はい、それは動作しますが、私はまだ私の理由を理解したいと思います。 – mcmillab

2

コロン文字をエスケープする必要があります。

TryParseExact("04:00:01", "HH\\:mm\\:ss" ...