2009-09-28 29 views
5

文字列"28/09/2009"DateTimeに変換する方法を教えてください。 例: "2009-09-28 17:30:40"をDateTimeに変換します。 "28/09/2009 17:30:40"をDateTimeに変換したいと思います。 "20090928 17:30:40"をDateTimeに変換したいと思います。C#で文字列を特定のDateTime形式に変換する方法は?

可能なフォーマットは複数あります。私はこれを試してみました:

string[] formats = new string[] {"yyyymmdd","yyyymmddThhmmss","yyyy/mm/dd hh:mm:ss","yyyy/mm/dd","yyyy-mm-dd hh:mm:ss","yyyy-mm-dd"}; 
IFormatProvider culture = new CultureInfo("en-US", true); 
DateTime formattedDate = DateTime.ParseExact(aDate, formats, culture, DateTimeStyles.None); 

この例では、「文字列が有効な日時として認識されませんでした」というメッセージと例外をスローします。

上記のコードで何が問題になっていますか?

+0

Falaíのbrazuca:

は、ここでは、完全なフォーマット文字列のリファレンスを参照してください! :)あなたのシナリオに関するもう少し詳しい情報を教えてもらえますか?あなたは同じ文脈で3つの形式すべてで日付を受け取っていますか? –

+0

Falaaí....私はXML文書を読む必要があります。このドキュメントでは日付を表す文字列があります。しかし、これらの日付は複数の形式にすることができます。私はこれらの形式を特定し、文字列をDateTimeに変換する必要があります。 –

答えて

12

"dd/MM/yyyy"のように、フォーマットを最初に置くことはありません。

小文字の 'm'は '分'のため、大文字の 'M'にも注意してください。あなたはあなたの時間と同様の問題を抱えています。あなたのサンプルはすべて24時間使用するので、大文字の「H」が必要です。

あなたのフォーマット文字列の配列は次のようになります。

string[] formats = {"dd/MM/yyyy", "yyyy-MM-dd HH:mm:ss", "dd/MM/yyyy HH:mm:ss", "yyyyMMdd HH:mm:ss"}; 

これらのフォーマットは、正確にご提供されるサンプル文字列と一致します。

さらに、この場合は、en-USではなく不変のカルチャを使用することをお勧めします。それ以外の場合、書式文字列の '/'文字は実際にカルチャ固有の日付区切り文字であり、ユーザーはローカルシステムで上書きされる可能性があります。

最後に、文字列を一致させるのに問題があるので、TryParseExact()を使用するとよいでしょう。これは構文解析と同じように機能しますが、値を返すのではなくoutパラメータを使用して、ブール値例外をスローするのではなく、成功または失敗を示す
http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

関連する問題