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

Any*_*are 3 c# asp.net string datetime cultureinfo

我尝试将字符串转换为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);
Run Code Online (Sandbox Code Playgroud)

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

Adr*_*ode 9

所需的格式是

string format = "dd/M/yyyy";
Run Code Online (Sandbox Code Playgroud)

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

如果输入是12/4/2012,在用'/'拆分后,你将获得12,4,2012,然后将它们连接起来以获得"12/4/2012".为什么这个?

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

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

如果你不信任输入,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);
Run Code Online (Sandbox Code Playgroud)