字符串未被识别为有效的DateTime?

我尝试将字符串转换为datetime时间,但每次我得到:

字符串未被识别为有效的DateTime。

代码是:

 string format = "dd/MM/yyyy"; obj.TransDate = DateTime.ParseExact(lbl_TransDate.Text.Split('/')[0] + "/" + lbl_TransDate.Text.Split('/')[1] + "/" + lbl_TransDate.Text.Split('/')[2], format, CultureInfo.InvariantCulture); 

当我调试我尝试解析它的日期是: 12/4/2012

所需的格式是

 string format = "dd/M/yyyy"; 

我不明白一件事,为什么拆分连接字符串,因为你会得到同样的东西?

如果输入是12/4/2012 ,在用‘/’拆分后,你将得到12,4,2012,然后将它们连接起来以获得“12/4/2012”。 为什么这个?

此外,如果您确实需要拆分,则可以将其存储到数组中,这样您就不需要将其拆分3次:

 var splits = lbl_TransDate.Text.Split('/'); DateTime.ParseExact(splits[0] + "/" + splits[1] + "/" + splits[2], ...); 

如果你不信任输入,splits数组可能不是Length = 3,而且更多,你可以使用DateTime.TryParseExact

编辑您可以使用多种格式的重载因此,如果输入可能是12/4/2012或12/04/2012 ,您可以同时使用这两种格式

 var formats = new[] {"dd/M/yyyy","dd/MM/yyyy"}; var date = DateTime.ParseExact("12/4/2012", formats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AssumeLocal); 

我同意其他答案,看起来你做了很多工作来解决应该是一个简单的问题。 我会使用文化信息中的英国日期格式。

 var convertedDay = DateTime.Parse("12/04/2010", new CultureInfo("en-GB").DateTimeFormat); 

当您只有一位数时,您指定MM 。 使用PadLeftfunction,只使用一个M ,或使用零填充。

以下代码演示了这一点,并根据需要填充了ddMM

 string format = "dd/MM/yyyy"; string mydate = "12/4/2012"; DateTime t = DateTime.ParseExact(mydate.Split('/')[0].PadLeft(2,'0') + "/" + mydate.Split('/')[1].PadLeft(2,'0') + "/" + mydate.Split('/')[2], format, CultureInfo.InvariantCulture); 

输出是:

 12/04/2012 00:00:00 

确保在Web配置中添加以下内容

  ... 

有关正确的文化国家/地区代码,请参阅以

http://sharpertutorials.com/list-of-culture-codes/