2013-05-21 57 views
1

我正在編寫一個集成測試,因此我正在讀取一個CSV文件作爲DataTable,然後嘗試解析每行中的元素。然而,當我得到一個日期的字符串表示,並把它傳遞到DateTime.ParseExact我得到的錯誤:「字符串未被識別爲有效的DateTimeParseExact無法識別從DataTable中提取的字符串

當我使用註釋掉的行代碼我在這裏提供,並明確定義日期爲一個字符串,然後ParseExact工作得很好。當我調試集成測試時,startDateString具有正確的日期值。 Debug capture of the value from the DataTable當它傳入ParseExact由於某些原因它會引發錯誤。

我試圖使用明確的文化,例如。 「en-GB」和DateStyles.None,沒有太大的成功。有沒有人有任何想法,至於爲什麼從DataRow得到的字符串輸入不被DateTime.ParseExact構造函數接受?

謝謝。

... 
var dataTable= file.ReadFile("file.csv", 2); 
      for (int i = 0; i < dataTable.Rows.Count/2; i = i + 2) 
      { 
       var startDate = new DateTime(); 
       var maturity= new DateTime(); 
       try 
       { 
        var startDateString = dataTable.Rows[i]["item9"].ToString(); 
//     var startDateString = "24/01/2008"; 
        var formats = new[] { "dd/M/yyyy", "dd/MM/yyyy" }; 
        startDate = DateTime.ParseExact(startDateString, formats, CultureInfo.InvariantCulture, 
             DateTimeStyles.AssumeLocal); 
        endDate = DateTime.ParseExact(dataTable.Rows[i]["item10"].ToString(), formats, CultureInfo.InvariantCulture, 
             DateTimeStyles.AssumeLocal); 
       } 
       catch (Exception e) 
       { 
        throw new FormatException(String.Format("There was an error with the format of one of the dates in the file")); 
       } 
... 
+0

是否有可能從「item9」列中拉出的值不是日期?你確認從數據表中分配給startDateString的值是你期望的嗎? – Jeff

+0

檢查dataTable.Rows [i] [「item10」]。ToString()'並在此處發佈 – oleksii

+0

以下是從DataRow返回的值的調試捕獲。有任何想法嗎? – cmdel

回答

1

您的startDateString在其中有尾隨空格。

+0

好的電話!我昨天工作得太遲了,看起來,在我面前看不清楚!感謝大家換一雙眼睛。 – cmdel