2016-11-11 9 views
1

Iは多くの異なる形式(時、分、秒、ミリ秒の多かれ少なかれ任意の組み合わせ)でレースから時間の結果を有する:DateTime.TryParseExact単一の第2

  • 01:22:51.15
  • 22:
  • 12:21
  • 15.12
  • 15.0
  • ...

私はそれらを解析します有効なフォーマットのリストとこれまでのすべてのフォーマットは1つを除いて動作します。 "5"。

何らかの理由で、次のリスト(「s」を1番目の項目として含む)が「5」という文字列をDateTimeに解析するのに役立たず、「25」は正常に機能します。

var timeString = "5"; 
var timeFormats = new[] { "s", "s.f", "s.ff", "ss", "ss.f", "ss.ff", "m:ss", "m:ss.f", "m:ss.ff", "mm:ss", "mm:ss.f", "mm:ss.ff", "H:mm:ss", "H:mm:ss.f", "H:mm:ss.ff", "HH:mm:ss", "HH:mm:ss.f", "HH:mm:ss.ff" }; 
DateTime timeValue; 
DateTime.TryParseExact(timeString, timeFormats, null, DateTimeStyles.None, out timeValue); 

私はそれが期待どおりに動作しない理由はありますか?または、他のナゲットパッケージを追加しなくても、これらの時間フォーマットをすべてカバーするよりクリーンな方法がありますか? 乾杯!

+0

私は、そのコードが現在あなたに与えていることを尋ねるのはあまりにも多いとは思いませんか? "これはうまくいかない"ということはあまりありません。 – Abion47

+0

あなたはタイムスパンで作業しています。それは 'TimeSpan'が' DateTime'ではなく 'TimeSpan'です。 – Luaan

+0

申し訳ありませんが、私はTryParseExactがfalseを返すことを意味します。 –

答えて

2

フォーマットに1文字しかないため、秒単位のカスタムフォーマットではなく、the Sortable standard formatとして扱われます。

これを変更するには、"%s"のように、カスタムフォーマットの先頭に%という文字を付けます。 "Using single custom format specifiers"を参照してください。

また、これらがレースの実際の経過時間である場合、TimeSpanDateTimeよりも適切なデータ構造であることを認識してください。 2つのオブジェクト間ですべての書式設定トークンが同じではないので、切り替え時には注意してください。特にTimeSpanhを時間単位で使用し、Hでは使用しません。 Custom TimeSpan Format Stringsを参照してください。

+0

%sがトリックをしました、ありがとうございます。私はTimeSpanを認識していますが、DateTimeとしてデータベースに格納しなければならないため、DateTimeに解析していました。 –

+2

データベースにDateTimeとして保存しないでください。代わりに、合計秒数、または合計ミリ秒数、または必要な精度で保存します。 DateTimeとして保存すると間違ったタイプが使用され、エラーが発生する可能性があります。 –

関連する問題