2012-03-26 16 views
1

可能性の重複:
DateTime.TryParse century control C#はMM/DD/YY形式から有効な日付を作成

私は.dbfファイルからデータをインポートしていますC#のアプリを持って、そしてそれを挿入SQL Serverに追加します。ファイルには恐ろしいMM/dd/yy形式のDOB列があります。私はちょうどConvert.ToDateTimeを使用して、私が期待したようにほとんどのデータを1900年代に変換します。正しく変換されず、今から30年後に生まれた人がいます。どのようにして変換を強制的にMM/dd/19XXと書くだけですか?

たとえば、.DBFファイルのこの日付は、12/29/2912/29/2029に変換されます。

私はそうのような.dbfファイルを読んでいる:あなたはretrived日付の正確な形式を知っているなら、あなたはParseExactを(使用することができます

var fileInfo = new System.IO.FileInfo(dbfPath); 
      string dsPath = fileInfo.DirectoryName.ToString(); 

      DataSet DSResult = new DataSet(); 
      using (OleDbConnection cn = new OleDbConnection(
      @"Provider=Microsoft.Jet.OLEDB.4.0;" + 
      @"Data Source=" + dsPath + ";" + //Set the Data Sourde = to the directory of the file. 
      @"Extended Properties=dBASE III;")) 

      using (OleDbCommand cm = cn.CreateCommand()) 
      { 
       cn.Open(); 
       cm.CommandText = "SELECT * FROM UPDATED"; //Specify the file name for the select statement. 
       using (OleDbDataAdapter dba = new OleDbDataAdapter(cm)) 
       { 


        dba.Fill(DSResult); 

       } 
      } 


      return DSResult; 
+0

正しく変換されていないレコードの例を投稿できますか? –

+1

どうやってdbfを読んでいるのですか? Cos ADOはそれをDataSetに読み取ることができるはずです – Jester

+0

おそらく、データウィンドウ(1950年より前の年は2050年として扱われます)が見えています。 –

答えて

4

することができます。

DateTimeFormatInfo formatProvider = new DateTimeFormatInfo(); 
formatProvider.Calendar.TwoDigitYearMax = DateTime.Now.Year; 

DateTime date = DateTime.ParseExact("12/12/22", "MM/dd/yy", formatProvider); 
0

)または適切に変換するためのDateTime構造体のTryParseExact()メソッド日付表現。

必要な構文解析には、追加のforamt文字列パラメータが必要です。

dateString = "Sun 15 Jun 2008 8:30 AM -06:00"; // your date string 
format = "MM/dd/yy"; // format string 
try { 
    result = DateTime.ParseExact(dateString, format, provider); 
} 

しかし、データウィンドウのコメントで述べたようにあなたは100年の範囲の最後の年を変更するにはCalendar.TwoDigitYearMaxプロパティを変更することができ、問題

+0

日付のウインドウは* a *問題、それは*問題です。この解決法はそれに対処しません。 – phoog