2016-12-05 1 views
1

英語の日付をドイツ語に変換しようとしましたが、フォーマットが正しくありません。Convert english正確な構文解析の日付

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
DateTime currentCultureDate = DateTime.Now; 
string format = "dd.MM.yyyy HH:mm:ss"; 

Console.WriteLine("Format: " + format); 
Console.WriteLine("Original Date: " + currentCultureDate); 

DateTime convertedDate = DateTime.ParseExact(currentCultureDate.ToString(), format, new CultureInfo("de-DE")); 

Console.WriteLine("Converted Date: " + convertedDate); 

FormatException .....

+2

'ParseExact'を使用していますが、' 'dd.MM.yyyy HH:mm:ss" 'という形式を期待していますが、' currentCultureDate.ToString() 'で使用しています。その形式ではないので、 'FormatException'を返します。 – Equalsk

+0

しかし、私はtoString()を使ってそれを変換したので、datetimeがなくなり、正しいフォーマットになりました – mty

+0

そうではありません。 'currentCultureDate.ToString()'を表示し、そのフォーマットを見てください。 '/'で区切られています。 '.'でフォーマットを指定すると、エラーが発生します... – Equalsk

答えて

2

DateTime.ParseExactstringからDateTimeを作成するために使用されます。その文字列をDateTimeに変換するために使用されるDateTimeFormatまたはCultureInfoを渡すことができます。

CultureInfostringにそれを変換しません方法は、de-DEを言います。したがって、あなたはDateTime.ToStringを使用することができます。

string germanFormat = DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss", new CultureInfo("de-DE")); 
1

あなたが言うことを行っていない:あなたはすでにDateTimeを持っている場合は

// This is German format 
string format = "dd.MM.yyyy HH:mm:ss"; 

// This takes a date and parses it using the ABOVE FORMAT - which is German 
DateTime convertedDate = DateTime.ParseExact(currentCultureDate.ToString(), format, new CultureInfo("de-DE")); 

:あなたのコードは、実際にドイツ形式でパースに日付をしようとします出力をドイツ語形式で入力する場合は、ParseExactは不要ですが、ToString

string german = DateTime.Now.ToString(format, new CultureInfo("de-DE")); 

DateTime自体にはカルチャの書式設定がありません。それはちょうど日付と時間です。 の出力がDateTimeの場合にのみ、文字列に変換する必要があります。そのため、カルチャ情報が必要です。だから、親指のルールは次のとおりです。日付と時刻の値を表す文字列を取得する場合

  1. は、どちらか固定フォーマットとParseExactを使用したり、フレームワークに依存する、DateTimeにそれを解析する必要があり、ソースカルチャ情報をParseまたはTryParseに渡します。
  2. あなたはDateTimeを持っていると出力それにしたい場合は、固定フォーマット文字列と文化の情報のいずれかを提供し、ToStringを使用してフォーマットする必要があり、あるいは、現在のスレッドのカルチャのToStringを使用しています。