2011-07-03 20 views
0

私はプロジェクトに取り組んでおり、データベースを持っていません。私はADO.NetのDatasetを使用しています。その後、データを保存するために、XMLファイルを作成し、XMLファイルを読み込んでデータセットを再度ロードします。 xmlファイルはプロジェクトファイルなので、このファイルをシステムからシステムに移動する必要があります。.Net DataTable日付問題

このデータセットには、DateTimeの列もあります。

フィールドに日付を特定の形式(dd/MM/yyyy)で保存したいとします。

現在、私の問題は、システムの日付形式を検出して日付を読み取ることです。しかし、システムの日付形式は、システムによって異なります。 MM/dd/yyyyを使用する人もいれば、dd/MM/yyyyを使用する人もいます。したがって、フォーマットが変更されると、例外がスローされます。彼らのための任意のソリューションですか?

データテーブルのDataTimeフィールドにカスタムフォーマットの日付を入力することはできますか?

ありがとうございます。あなたは第二引数のデータの形式を指定することができ http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

答えて

0

過去の日付時刻のシリアル化に関して同様の問題がありました。

datetimeフィールドを削除し、代わりに文字列を使用することをお勧めします。このようにして、DataSetに入力された日付時刻オブジェクトの形式を完全に制御できます。

文字列として入力したら、どのようなカルチャと日時が記録されているかを記録する必要があります。これらの2つの値をソフトウェア内にハードコードし、 )。それらを.configファイルにドロップします(より良い)。

または

これらの追加フィールドをデータセットに追加します。

MyDateField - DateTime as a string 
Format.  - "dd/MM/yyyy HH:mm:ss" (for example) 
Culture  - "EN-US" 

DataSetから日付を読み取ってDateTimeオブジェクトをインスタンス化するときに使用します。

var dateTime = DateTime.ParseExact([mydatefield], [format], new cultureInfo([culture])); 

* []内のフィールドは、データセットの行から取得された値です。

この方法では、どのようなマシンでもこのdatetimeフィールドを使用できます。どのようなカルチャとフォーマットプロバイダを使用するのかをデータセットで指定します。

これらの日時プロバイダとカルチャ情報を使用するには、データセットの日時フィールドをどこにでもインスタンス化する必要があります。

個人的には、.configファイルからフォーマットとカルチャ情報を読み取ることになりますが、これはデータセットの行ごとに変更される可能性が低いためです。

+0

ありがとうあなたのジャスティンは、その非常に私の問題に役立ちます。再度、感謝します。 –

0

あなたはこのを試してみました。

日付は、String.formatメソッドを使用して記述するときにもフォーマットできます。

0

DateTimeオブジェクトは単なるプロパティとして日付を格納し、または月、年のための一連のプロパティ、日、などしかし、あなたはそうのような日付文字列の書式を設定することができます

 string formatted = String.Format("{0:yyyy/MM/dd HH:mm}", datetime); 

それともあなたがいる場合

 string formatted = String.Format("{0:yyyy/MM/dd HH:mm}", DateTime.Now); 

それとも、DateTimeオブジェクトに文字列を読んでいるならば、あなたはいくつかの構文解析を行う必要があるだろう:

 string date = "2011/5/20" 
    string dateparts = date.Split('/'); 
    string year = dateparts[0]; 
    string month = dateparts[1]; 
    string day = dateparts[2]; 

    DateTime dt = new DateTime(year, month, day, 0, 0, 0); 
私はそれはこのように働くだろうと信じて、システムの日付を取得

DateTimeオブジェクトは日付のさまざまな文字列表現から初期化できますが、通常は解析する必要はありません。あなたの状況にもよりますが、

0

特定のフォーマットに日時をデシリアライズ/

 DateTime s = DateTime.Now; 
     MessageBox.Show(s.ToString("yyddMM")); 
     MessageBox.Show(s.ToShortDateString()); 
     DateTime s2 = DateTime.ParseExact("110307", "yyddMM", CultureInfo.InvariantCulture); 
     MessageBox.Show(s2.ToShortDateString()); 

をシリアル化するだけで簡単に例と私は完全に単なる文字列を使用し、限り、あなたはテキストファイルに日付を保存するよう..ここジャスティンと同意代わりにフィールド