2017-06-11 7 views
0

2つのアプリケーションがあります.1回目はDataSetをファイルにエクスポートし、2回目はDataSetにファイルを読み込みます。両方のアプリケーションでCultureInfoが "en-US"に設定され、DataSet.Localeが "en-US"に設定されています。最初のアプリケーションでDataSetで日付/時刻をエクスポート/インポートする方法C#

私はDateTimeフィールドを持っている:

dt.Columns.Add("DateCreated", typeof(DateTime)); 

ファイルに書き込むより:

二アプリで
ds.WriteXml(fileName); 

ds.ReadXml(reader); 

と私は日時フィールドを読み取ろうDataRowから:

DateTime? dateCreated = Convert.ToDateTime(dr["DateCreated"]); 

それは例外をスロー:

'Convert.ToDateTime(DR [ "DateCreated"])' タイプ 'にSystem.FormatException' キャストと同じ場合、またはIでのCultureInfoを指定の例外を投げました。また、スキーマでDataSetを保存するように指定すると変換されません。この分野で

日付値は形式である:「2017-06-11T08:10:06.2212339 3時00分」

これが起こると、それはDateFormatの文字列を指定せずのDateTimeに変換することが可能であるのはなぜ?ありがとうございました!

+1

私たちの全体のメソッドのコードを表示します。また、発生した例外のスクリーンショットも表示するので、追加のコンテキストを見ることができます。 – mjwills

+1

値が正しく表示されません - '9'と '0'の間のスペースではなく '+'または ' - '記号(UTCからのオフセットである '03:00') –

+0

を投げたので、 FormatException、しかしメッセージは何ですか?いずれにしても、@StephenMueckeが正しく、そのエラーは "Stringが有効なDateTimeとして認識されませんでした"というFormatExceptionをスローします。シンプルに確認する。 –

答えて

0

UTCの日付文字列の書式が一部をタイムゾーンオフセットの正または負の符号を使用せずに間違ったようで、与えられたメッセージString was not recognized as a valid DateTimeFormatExceptionをスローします:DataRowによって指定された日付形式が正の時に固定されている場合は

2017-06-11T08:10:06.2212339 03:00 
          ^
          missing sign offset here 

このように一部を相殺する前にオフセット記号を挿入するためにString.Insertを使用し、オフセットとあなたはちょうどそれらを読みたい:

String date = (dr["DateCreated"] ?? String.Empty).ToString(); 

if (!String.IsNullOrEmpty(date)) 
{ 
    date = date.Insert((date.Length - 5), "+"); 

    // NB: Convert.ToDateTime will give same value as DateTime.ParseExact here 
    DateTime? dateCreated = DateTime.ParseExact(date, "yyyy-MM-ddTHH:mm:ss.FFFFFFF zzzz", 
          CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal); 
} 

上の出力文字列& dateCreatedは(UTCベースで)このようにする必要があります:

date: 2017-06-11T08:10:06.2212339 +03:00 

dateCreated: 6/11/2017 5:10:06 AM 

NB:Convert.ToDateTimeはおそらくDataRow入力の場合はObject引数の代わりstringを使用していますので、このコードは、該当する場合dr["DateCreated"]は確かにnullを持っていないしていること値:

DateTime? dateCreated = Convert.ToDateTime(dr["DateCreated"].ToString().Insert((date.Length - 6), "+")); 

解析例:.NET Fiddle Demo

関連問題:

Custom DateTime formats when using DataSet.WriteXml in .NET

Reading XML into Datatable gives incorrect DateTime when the time has Time Zone info

関連する問題