字符串未被识别为有效的日期时间?

3
我试图将字符串转换为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);

当我调试尝试解析的日期时是:2012年12月4日


2
纯粹出于好奇,为什么不直接用 DateTime.ParseExact(lbl_TransDate.Text, format, CultureInfo.InvariantCulture) - Vlad
这不是我的代码,我只是测试了这一部分。 - Anyname Donotcare
你是否使用以下代码进行了检查 DateTime dt; string Temp1 = "Your Date"; if (DateTime.TryParse(Temp1, out dt)) { // 如果是有效日期 string date = dt.ToShortDateString(); string time = dt.ToShortTimeString(); } - Pankaj
4个回答

9
期望的格式是:
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], ...);

如果你不信任输入的内容,那么分割后的数组可能不是 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);

“informix”日期格式为“dd/MM/yyyy”。 - Anyname Donotcare
当我尝试使用您的日期时间字符串时,系统不支持在日历System.Globalization.GregorianCalendar中表示的DateTime。 - Anyname Donotcare

3

我同意其他答案的观点,看起来你在解决一个本应很简单的问题上花了很多功夫。我建议使用文化信息中的英式日期格式。

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

1

1

当您只有一个数字时,您正在指定MM。请使用单个M或使用PadLeft函数在左侧填充零。

以下代码演示了如何使用所需的填充方式填充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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接