当有任何日期字段时,不能正确读取CSV

时间:2015-07-29 08:27:39

标签: c# csv

csv文件数据 -

DB   PID  Date1       Date2
--------------------------------
DB1  561  06-04-2015  06-05-2015
DB2  538  06-04-2015  08-21-2015
DB3  722  06-04-2015  08-21-2015

此处的日期格式为MM-DD-YYYY。问题是在阅读Date2列的日期时,它的阅读日期为DD-MM-YYYY。这就是为什么在08-21-2015' 08'成为DD和' 21'变成月份并得到验证错误。

试图解决代码:

Date2Val = Convert.ToDateTime(TestContext.DataRow["Date2"]).ToString("dd-MM-yyyy 00:00:00.000");

适用于Date1列,但不适用于Date2。

3 个答案:

答案 0 :(得分:1)

Convert.ToDateTime使用CurrentCulture的{​​{3}}。

这意味着您的CurrentCulturedd-MM-yyyy作为标准日期和时间格式,而不是MM-dd-yyyy

您可以<{3}}方法明确使用standard date and time format明确指定格式;

Date2Val = DateTime.ParseExact(TestContext.DataRow["Date2"].ToString(), 
                               "MM-dd-yyyy",
                               CultureInfo.InvariantCulture)
                               .ToString("dd-MM-yyyy 00:00:00.000");

答案 1 :(得分:0)

您需要明确说明日期值的格式,因为DateTime.Parse始终使用系统文化信息中配置的日期格式。

以下使用您需要的格式:

Date2Val = DateTime.ParseExact(TestContext.DataRow["Date2"].ToString(), "MM-dd-yyyy", CultureInfo.InvariantCulture).ToString("dd-MM-yyyy 00:00:00.000");

经过多次努力之后,您刚刚告诉我们Date2不仅有日期值,还有时间部分。在这种情况下,您需要使用此:

Date2Val = DateTime.ParseExact(TestContext.DataRow["Date2"].ToString(), "MM-dd-yyyy HH:mm:ss", CultureInfo.InvariantCulture).ToString("dd-MM-yyyy 00:00:00.000");

答案 2 :(得分:0)

也许会强制将数据转换为字符串,以防止自动转换,然后在代码中将其解析为DateTime。 我在数据顶部放置了两个qoutes强制将其作为文本。这样就可以返回字符串,而不会删除引号。

columnInt, columnString
1, "11.12.89"  
2, "12.12.89"