2016-08-15 4 views
0

部分的または完全な日付で検索できるフィルタフィールドがあります。これは、ユーザーが入力したいと思う方法でTryParseExactが表示されない最高のオプションのように。DateTime.TryParseはyyyyでしか失敗しません

DateTime.TryParse(fromDate.Text, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateFromValue) 

yyyyの文字列以外のすべてを解析します

問題は、次のコードでは、ということです。例えば。 "05/1980"と "1980/05"は{1/05/1980 12:00:00 AM}と認識されますが、 "1980"は失敗します。

パーザは、すべてが4桁のシーケンスである場合、たとえばyyyyとffffを区別する方法がないと思われますが、まだこの動作を取得する必要があります。

if(!DateTime.TryParse("1980", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) 
    DateTime.TryParseExact("1980","yyyy",CultureInfo.InvariantCulture, DateTimeStyles.None, out date); 

また、間違ったやり方をしているのでしょうか?

ありがとうございます!

答えて

2

月と日があいまいであるため、DateTime.Parseをちょうど年だけ使うことはできないと思います。特定の日付形式のDateTime.ParseExactまたはDateTime.TryParseExactを代わりに使用します。

あなたのif条件は私に間違って見えますが、どのように2つの条件を組み合わせますか?

if(!DateTime.TryParse("1980", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) 
DateTime.TryParseExact("1980","yyyy",CultureInfo.InvariantCulture, DateTimeStyles.None, out date); 

はされている必要があります。

if(DateTime.TryParse("1980", CultureInfo.InvariantCulture, DateTimeStyles.None, out date) || 
DateTime.TryParseExact("1980","yyyy",CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) 
// If the first parse success, use that. Otherwise, try to parse the year only with the parseexact. 
// Notice the || and the first condition needs to be positive. 
+0

良い点を考慮してきた - 私はもっと注意しなければなりませんコピペ!それを指摘していただきありがとうございます:) この特別なケースでは、TryParseで欠落している日と月を推測しても問題ありません(デフォルトでは1月1日など)。 –

0

部分一致が必要な場合は、最も簡単な方法は、日付を文字列として扱い、日付形式に依存するのではなく文字列マッチングを使用することです。

+0

私はそれが_fully_仕事は本当に魅力的に見えるようにしよう、ということが、TryParse _mostly_作品:) –

関連する問題