C# 对于某些适用于前几行的字符串,“我获取字符串”未被识别为有效的日期时间错误

C# 对于某些适用于前几行的字符串,“我获取字符串”未被识别为有效的日期时间错误,c#,.net,datetime,C#,.net,Datetime,我有个奇怪的问题。我知道这是一个常见错误,通过正确使用DateTime.ParseExact和正确的格式可以很容易地修复。我有一个数据库,其中日期列的格式为yyyyMMdd。我正在使用以下代码转换为DateTime变量: DateTime date = new DateTime(); date = DateTime.ParseExact(row[2].ToString().Trim(), "yyyyMMdd", CultureInfo.InvariantCulture); 这段代码在每一行中循

我有个奇怪的问题。我知道这是一个常见错误,通过正确使用DateTime.ParseExact和正确的格式可以很容易地修复。我有一个数据库,其中日期列的格式为yyyyMMdd。我正在使用以下代码转换为DateTime变量:

DateTime date = new DateTime();
date = DateTime.ParseExact(row[2].ToString().Trim(), "yyyyMMdd", CultureInfo.InvariantCulture);
这段代码在每一行中循环。它可以正常工作,直到它到达一个位置,在那里它一直抛出这个错误。我不知道这有什么不同。我检查了这个值,它是“20040414”。在此之前的几行也具有相同的值,但它们的工作没有问题。可能是什么问题

例外情况:

System.FormatException:未将字符串识别为有效的日期时间。 在System.DateTimeParse.ParseExact(字符串s,字符串格式, 日期时间格式信息(dtfi)


我不确定您的问题,但您可以尝试使用TryParse而不是ParseExact。也许能帮你找到你的问题

DateTime date = new DateTime;
if(DateTime.TryParse(row[2].ToString().Trim(), out date))
{
//successful datetime put into date
}
试试这个

DateTime date = new DateTime();
date = Convert.ToDateTime(row[2].ToString().Trim()).ToString("yyyyMMdd");

我不确定,因为我还没有测试。希望这对您有用。

您是否在最后一行遇到异常?是的。我更新了这篇文章。我认为它实际上不太可能是相同的值。我怀疑那里可能有一些不可见的空白。我建议您在尝试解析之前记录(修剪过的)字符串及其长度。(顺便说一句,为什么要创建默认的
DateTime
值?为什么不让
DateTime date=DateTime.ParseExact(…)
?我也尝试了以下操作,但得到了相同的错误:
string dateToParse=新字符串(行[2]。ToString().Trim().Where(c=>char.IsDigit(c)).ToArray())
AllowUserToAddress=true吗?谢谢您的建议。此代码将不起作用,因为输出是要应用回日期时间的字符串。即使我对结果执行另一次转换,它仍然会出错。string.Format(“{0:yyyyymmdd}”,第[2]行。ToString().Trim()),请重试,这应该可以,因为它对我有效。我再次收到以下消息:
System.FormatException:String未被识别为有效的DateTime.at System.DateTimeParse.Parse(字符串s,DateTimeFormatInfo dtfi,datetimestyle)at System.Convert.ToDateTime(字符串值)
谢谢你的建议。我试过了,结果也一样。我不确定这是否有用,但为了保证值是字符串,并且与你期望的完全一致,你可以将一个临时变量设置为行[2]的值,然后尝试使用临时字符串变量设置日期时间。。。