2012-01-09 11 views
0

C#アプリケーションはMySQLデータベースから日付を読み取る必要があります。問題は、システムのローカライゼーション設定によって日付の形式が異なることです。C#で日付を取得する方法、ローカライゼーションなしで

私はいつもyyyy-MM-dd hh:mm:ss、yyyy-MM-ddの形式で日付を取得できるかどうかは、ローカリゼーションの設定に関係なくです。

ありがとうございます!

あなたは、データベースから 文字列としてそれを読み戻すべきではありません
+1

MySQLの日付を表す列のデータ型は何ですか? – dasblinkenlight

+0

dateとdatetime(私はそれらを複数の異なるフィールドで使用します) – user198003

+0

あなたが話していることを実証するコード例を提供できますか?私はあなたがMySQLとのやりとりについて話しているのか、それともデータベースから読み込んだdatetimeをユーザに提示したいのか分かりません。 –

答えて

2

日付を真の日付または日時の値として格納する場合、アプリケーションは元のバイナリデータを元に戻し、日付値の文字列表現を作成するまではローカライズの対象になりません。私の推測では、現在のロケールを使用するConsole.WriteLine(theValue);を使用して、デバッガの値を調べているということです。文字列以外の値を文字列に変換するときは、常に希望する形式や目的のカルチャを含めます。

日付を文字列として格納する場合は、どの形式がデータベースに格納されているかを常に把握しておく必要があります。ちょうど彼らがそうであるように値を処理し、ユーザーにそれらを表示するために必要になるまでの文字列に変換しないでください:

DateTime theValue = theReader.GetDateTime(fieldOrdinal); 
var theValueAsText = theValue.ToString(CultureInfo.InvariantCulture); 
var specificTextRepr = theValue.ToString("yyyy-MM-dd HH:mm:ss"); 

theValueAsText変数日付がdateまたはdatetimeとして保存されていると仮定すると、

特定の文化に結び付けられていない文字列表現になります。 specificTextReprがあなたの特定のテキスト表現になります。

3

- そして、あなたは、データを読んでいるか示していないが、あなたはDataTableを移入するために何かを使用する場合、またはLINQ、またはIDataReader.GetDateTime文字列の書式設定は必要ありません(データベースに正しく格納されているように見えます)。本質形式を持っていない

DateTime値は、intよりも、それ以上は10進数または16進数である - それはあなたが問題ということを変換するを選択方法です、あなたはほとんど常にしない限り、その書式設定を行うことを避ける必要がありますあなたは本当に必要です。

0

あなたは、日付と日付/時刻の特定の表現で日付を格納するので、フォーマットは(すべてでそれに再生されない

date_format(dob,'%d/%m/%Y')

select date_format(dob,'%d/%m/%Y') dob from student where Id=1 
2

を使用してクエリで直接日付をフォーマットすることができます日付/時刻が文字列として格納されているとき、書式設定が重要なときに間違った理由で格納されていた記憶スキームとは対照的に)。

C#コードからMySQLをクエリすると、あなたのロケールに関係なく正しい日付が得られます。それらは、と表示され、のロケールによって異なるが、は、のロケール設定に関係なく、適切な日付を表します。

関連する問題