2017-01-05 5 views
0

私はいつも日付を扱うのが難しいと感じています。彼らの変換フォーマットカルチャーなどは、ここで問題を引き起こします。 Convert.ToDateTime、DateTime.Parse、DateTime.TryParseは、日付が文字列として返され、値が一貫していないアプリケーションで問題に遭遇するまで、最後のものが私のお気に入りです。他の月は月)。 DateTime.TryParseは、日付が 'Month'で始まっているときには機能しません。例: 月が文字列DateTime.TryPase(DateStringは、ある月から始まり、ある日から始まる)

DateTime.TryParse("09/26/2011 14:45:00", out dtout) ? dtout : (DateTime?)null 

次の文解析されますで最初に表示されているとして期待どおりに「日」を持っているよう 次の文ではないでしょう最初

DateTime.TryParse("12/03/2012 14:30:00", out dtout) ? dtout : (DateTime?)null 

私が知っている日付文字列操作を登場nullを返します何が文字列で始まっているか誰も知らないときには特に良い考えです。 TryParseを実行する前に、文字列フォーマットを整列させるために使用できる文化情報などを適用することで、周辺には何か方法がありますか?

+2

datetime-stringが月で始まるかどうかをどのように知っていますか?両方とも正常に解析できれば、ランダムな日付を選ぶでしょうか? –

+1

'TryParseExact'を使うと、期待される文字列表現形式を指定できるようになります。 –

+0

私はそれらの両方を正しく解析しなければならず、両方を 'dd/MM/yyyy'の形式で表示する必要があります。 –

答えて

4

さて、あなたが許可されている形式のstring[]DateTime.TryParseExactを使用することができます。

string[] validDateTimeFormats = {"MM/dd/yyyy HH:mm:ss", "dd/MM/yyyy HH:mm:ss" }; 
DateTime dt; 
bool validDate1 = DateTime.TryParseExact("09/26/2011 14:45:00", validDateTimeFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt); 
bool validDate2 = DateTime.TryParseExact("12/03/2012 14:30:00", validDateTimeFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt); 

しかし、それは両方のフォーマットをするために使用することができる場合は、正しい日付が何であるかを知っていますか、コアの問題を解決していません。日付を解析します。日付は月か日で始まっていますか?例えば

bool validDate3 = DateTime.TryParseExact("01/05/2012 14:30:00", validDateTimeFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt); 

(その形式は、配列の最初であるので)これは正しいと思われる1月5日に解析し、それはまた、最初の月であってもよいです。

+0

Thanks Timにあります。私は今このアプローチで暮らすことができます。 dbレベルでのコア問題の調査。 –

関連する問題