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);

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

4

4 回答 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);
于 2012-04-12T12:02:35.673 回答
3

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

var convertedDay = DateTime.Parse("12/04/2010", new CultureInfo("en-GB").DateTimeFormat);
于 2012-04-12T12:18:51.817 回答
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
于 2012-04-12T12:06:38.913 回答
1

确保在您的网络配置中添加以下内容

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

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

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

于 2012-09-11T06:28:20.320 回答