2013-07-23 21 views
8

C#ではどのようにして文字列を解析しますか"dd/mm/yyyy"または"dd-mm-yyyy"をdatetimeに変換しますか? 文字列が正しい形式でないというエラーが表示されます。私はそれらのうちの1つだけでなくすべてのフォーマットを解析できる必要があります。日付形式の文字列をdatetimeに構文解析する

+1

私達にあなたのコードを表示します。 – SLaks

+6

"dd/mm/yyyy"形式と "mm/dd/yyyy"形式の両方が存在する場合、12月またはそれ以前の日付はあいまいでなければなりません - すべての形式を解析できる必要があります - それはコンピュータによって解決できない問題です。 –

+0

あなたが試したコードを私たちに教えてください。 –

答えて

8

mmは分を意味し、大文字のはを意味します。だから、この作品

それとは別に、あなたが日付の区切りとして/で文字列を解析する場合は、この交換用あなたの現在のカルチャの日付の区切りのための文字ですので、CultureInfo.InvariantCultureを使用する必要が

DateTime.ParseExact("23/07/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture); 

参照:The "/" Custom Format Specifier

+0

mm対MMの+1。 – Corak

1

指定された形式でDateTime.ParseExactメソッドを使用できます。

var d = DateTime.ParseExact(token, "dd-MM-yyyy", 
      CultureInfo.InvariantCulture, 
      DateTimeStyles.AllowWhiteSpaces | DateTimeStyles.AssumeUniversal); 
+0

フォーマット文字列が間違っています。 「mm」は月ではなく分です。 –

+0

@JohnKoernerはそれをキャッチしてくれてありがとう。 – doogle

3

受け入れる予定のデータ形式を定義する必要があります。すべてのフォーマットのようなものはありません。あなたはDateTime.ParseExact

にフォーマット列を渡すことができることを定義したら、あなたのコードは次のようになります。

string[] formats = new string[2] {"dd/MM/yyyy", "dd-MM-yyyy"}; 

string date = "23-02-2013"; 
try 
{ 
    DateTime result = DateTime.ParseExact(date, formats, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal); 
} 
catch (FormatException) 
{ 
    // your error handling code here 
} 
8

あなたが好きなフォーマットを定義することができます - プラスあなたが与えられた文化のデフォルトのリストを取得することができます。

var ci = new CultureInfo("en-US"); 
var formats = new[] { "M-d-yyyy", "dd-MM-yyyy", "MM-dd-yyyy", "M.d.yyyy", "dd.MM.yyyy", "MM.dd.yyyy" } 
     .Union(ci.DateTimeFormat.GetAllDateTimePatterns()).ToArray(); 

DateTime.ParseExact("07/23/2013", formats, ci, DateTimeStyles.AssumeLocal).Dump(); 
DateTime.ParseExact("07-23-2013", formats, ci, DateTimeStyles.AssumeLocal).Dump(); 
DateTime.ParseExact("23-07-2013", formats, ci, DateTimeStyles.AssumeLocal).Dump(); 
DateTime.ParseExact("23.07.2013", formats, ci, DateTimeStyles.AssumeLocal).Dump(); 

出力:

7/23/2013 12:00:00 AM 
7/23/2013 12:00:00 AM 
7/23/2013 12:00:00 AM 
7/23/2013 12:00:00 AM 
関連する問題