1

「ddMMyyyy」形式と標準の GB 英語形式 (「dd/mm/yyyy」など) の日付を解析する必要があり、DateTime.TryParse()メソッドを使用してそれを実行しようとしていますが、そうではありません。 「ddMMyyyy」形式を認識しません。

Date.TryParseExact()毎回カスタム形式を使用して指定できることはわかっていますが、それは日付ごとに 2 つのチェックを行うことを意味し (1 つはカスタム形式用で、もう 1 つはカルチャの標準形式用です)、もっと良い方法があるはずです。

DateTime.TryParse()カスタム日付形式と標準形式を認識する方法を取得する方法はありますか?

4

3 に答える 3

1

DateTime.TryParse()2つの日付形式のいずれかを同時に認識するように設定することはできないと思います。とのオーバーライドを見るDateTime.TryParse().TryParse(String, DateTime)TryParse(String, IFormatProvider, DateTimeStyles, DateTime)ここでの最大限の柔軟性によりIFormatProviderDateTimeFormatInfoクラスになる可能性のあるを提供できますがDateTimeFormatInfo、一度に処理できるのは1セットのフォーマットのみです。

ワンショット(私は試しませんでした)はDateTimeFormatInfo、LongDatePatternパターンとShortDatePatternパターンが異なる(使用したいパターンと一致する)新しいクラスを作成し、インスタンスをパラメーターとしてに渡すことですが、でTryParse2回チェックするDate.TryParseExact()方がはるかに合理的です。 。

于 2013-03-22T13:40:56.987 に答える
0

残念ながら、日付パーサーは、主に設計上、あまりインテリジェントではない傾向があります。あなたは日付を解析したい"ddMMyyyy"かもしれませんが、他の誰かが日付を解析したいかもしれません"yyyyMMdd"。状況によっては、これらが同一である場合があります (とは何"20121220"ですか?)。パーサーは馬鹿げているので、使用するフォーマットを指定する必要があります。複数の形式を指定する場合は、一度に 1 つずつ試す必要があります。これは、まさに回避しようとしているものです。

本当に 1 つのパスだけを取得したい場合は、正規表現を使用して関連部分を抽出し ( "(?<Day>\d{2})/?(?<Month>\d{2})/?(?<Year>\d{4})")、パーサーが認識する形式に再構成できます ( string.Format("{0}/{1}/{2}", match.Groups["Day"].Value, match.Groups["Month"].Value, match.Groups["Year"].Value))。

if正直なところ、ステートメントで String.Contains("/") を使用する方がおそらく効率的です。

于 2013-03-22T13:45:56.503 に答える
0

DateTime.TryParseExact MSDN リンクの使用について

于 2013-03-22T13:08:25.863 に答える