【发布时间】:2013-05-21 17:03:28
【问题描述】:
我正在编写一个集成测试,因此,我正在将一个 CSV 文件作为 DataTable 读取,然后尝试解析每一行中的元素。但是,当我获得日期的字符串表示形式并将其传递给 DateTime.ParseExact 时,我收到错误消息:“String was not known as a valid DateTime”
当我在此处提供的代码中使用注释掉的行并将日期明确定义为字符串时,ParseExact 就可以正常工作。当我调试集成测试时,startDateString 具有正确的日期值。 然后由于某种原因将其传递到 ParseExact 时会引发错误。
我尝试使用明确的文化,例如。 "en-GB" 和 DateStyles.None,但没有多大成功。有谁知道为什么 DateTime.ParseExact 构造函数不接受我从 DataRow 获得的字符串输入?
谢谢。
...
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"));
}
...
【问题讨论】:
-
是否有可能从“item9”列中提取的值不是日期?您是否确认从数据表中分配给 startDateString 的值是您所期望的?
-
查看
dataTable.Rows[i]["item10"].ToString()是什么并在此处发布 -
这是从 DataRow 返回的值的调试捕获。有什么想法吗?
-
看起来您在来自数据表的日期末尾有一个空格。 “2008 年 1 月 24 日”。通过调用 Trim() 删除该空间