字符串未被识别为有效的DateTime?(String was not recognized as

2019-06-25 07:49发布

我尝试将字符串转换为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

Answer 1:

所需的格式是

string format = "dd/M/yyyy";

我不明白的事情,虽然,何必在一个字符串连接在一起,因为你会得到同样的事情?

如果输入的是2012年12月4日 ,由“/”分开后,你会得到12,4,2012,然后将它们连接起来回到获得“2012年12月4日”。 为什么这个?

另外,如果你真的需要那一刹那,你可以存储到一个数组,所以你并不需要拆分的3倍:

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

如果你不信任的输入,劈叉阵列可能不是长度= 3,多的话,你可以使用DateTime.TryParseExact

编辑您可以使用多种格式的过载因此,如果输入的可能是2012年12月4日或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);


Answer 2:

我同意,它看起来像你做了很多解决什么应该是一个简单的问题的答案。 我会用英国的日期格式从文化信息。

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


Answer 3:

您指定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


Answer 4:

请确保你在你的web配置添加以下

<system.web>
<globalization culture="en-AU"/>...

有关正确的文化的国家代码如下

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



文章来源: String was not recognized as a valid DateTime?