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

本文关键字:不能 读取 CSV 任何 日期 字段 | 更新日期: 2023-09-27 18:05:22

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'变成了month,并且出现了验证错误。

尝试解决代码:

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

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

Convert.ToDateTime使用CurrentCulture的标准日期和时间格式。

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

您可以显式DateTime.ParseExact方法中使用自定义日期和时间说明符指定您的格式,如;

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

您需要显式地声明日期值的格式,因为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");

可能强制数据为字符串,以防止自动转换,然后在代码中将其解析为DateTime。我在数据周围加上双引号,使其成为文本。返回字符串,不删除引号。

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